crontab设置定时任务
作者:冥冰薇
提示:本篇文章约4116字符,阅读大约需要5分钟。
关注专栏不迷路
写在前面
之前在写Portainer教程的时候,有值友在评论区问我是否可以写一篇定时开关容器的文章。
诺,满足你。
注:以下内容不适用于群晖系统,其他基于Linux的NAS系统请自行测试。
定时启动容器(Linux)
在 Linux 系统下,你可以使用 cron 任务来定时启动 Docker 容器。以下是一个简单的步骤来设置定时启动 Portainer 容器:
第一步,打开终端;
第二步,输入 crontab -e
命令来编辑 cron 文件。如果这是你第一次运行这个命令,它可能会让你选择一个编辑器,例如 nano 或 vi;
强制使用nano编辑器的方法:
EDITOR=nano crontab -e
第三步,在打开的文件中,你可以添加一个新的 cron 任务。每个 cron 任务都有五个时间和日期字段,后面跟着要运行的命令。例如,如果你想要每天早上 6 点启动 Portainer 容器,你可以添加以下行:
0 6 * * * /usr/bin/docker start portainer
这行命令的意思是在每天的第 6 小时(即早上 6 点)执行 /usr/bin/docker start portainer
命令。
注意:你需要确保 Docker 的路径是正确的。你可以通过在终端中输入 which docker
来查看 Docker 的路径。
而群晖的docker路径就是:
/usr/local/bin/docker
第四步:保存并关闭文件。在 nano 编辑器中,你可以通过按 Ctrl+X
,然后按 Y
,最后按 Enter
来保存并关闭文件。
第五步:你可以通过输入 crontab -l
命令来查看你的 cron 任务。
这样,你的 Portainer 容器就会在每天早上 6 点启动了。如果你需要在不同的时间启动容器,或者启动不同的容器,你可以修改 cron 任务的时间和日期字段,以及要运行的命令。
注意:这种方法假设你已经创建了 Portainer 容器,并且容器的名称是 “portainer”。如果你还没有创建容器,或者容器的名称不同,你需要先创建容器,或者在命令中使用正确的容器名称。
要获取 Docker 容器的名称,你可以使用 docker ps
命令来列出正在运行的容器,并查看容器的名称列。以下是获取容器名称的步骤:
第一步:打开终端。
输入以下命令来列出正在运行的容器:
docker ps
这将显示正在运行的容器的列表,包括容器的ID、名称、状态等信息。
在列表中找到你感兴趣的容器,查看容器名称所在的列。容器名称通常在最后一列,标有`NAMES。
例如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\nabcdef123456 portainer "/portainer" 2 hours ago Up 2 hours 9000/tcp portainer
在这个示例中,容器名称为 “portainer”。
定时关闭任务同理,比如设置每天18点关闭portainer容器:
Portainer 容器,你可以添加以下行:
0 18 * * * /usr/bin/docker stop portainer
附:时间表达式
当你在 cron 任务中设置时间和日期字段时,它们控制了任务执行的时间。在这个特定的例子中,0 6 * * *
表示任务将在每天的第六个小时(早上6点)执行。
让我们来解释这个时间表达式的各个字段的含义:
第一个字段是分钟字段(Minutes):它表示一个小时中的哪一分钟执行任务。在这里,它是
0
,表示任务在每个小时的第 0 分钟执行。第二个字段是小时字段(Hours):它表示一天中的哪个小时执行任务。在这里,它是
6
,表示任务在每天的第 6 个小时执行。第三个字段是日期字段(Day of the month):它表示一个月中的哪一天执行任务。在这里,它是
*
,表示每天都执行任务。第四个字段是月份字段(Month):它表示一年中的哪个月执行任务。在这里,它是
*
,表示每个月都执行任务。第五个字段是星期字段(Day of the week):它表示一周中的哪一天执行任务。在这里,它是
*
,表示每一天都执行任务。
总结起来,0 6 * * *
表达式表示每天的第六个小时(早上6点)执行任务,无论是哪一天、哪一个月或是星期几。这就是为什么这个表达式被用来设置每天早上6点启动定时任务的含义。
以下为时间表达式的具体规范:
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Seconds | 是 | 0–59 | *, - | 标准实现不支持此字段。 |
Minutes | 是 | 0–59 | *, - | |
Hours | 是 | 0–23 | *, - | |
Day of month | 是 | 1–31 | *, - ? L W | ? L W只有部分软件实现了。 |
Month | 是 | 1–12或JAN–DEC | *, - | |
Day of week | 是 | 0–7或SUN–SAT | *, - ? L # | ? L #只有部分软件实现了。 |
Year | 否 | 1970–2099 | *, - | 标准实现不支持此字段。 |
注:
L
:L
字符在时间表达式中表示月份或星期的最后一天。例如,7L
表示月份中的最后一个星期天,L-3
表示一个月中的倒数第三天。W
:W
字符在时间表达式中表示最近的工作日(周一至周五)。它用于日期字段(Day of month)中。例如,15W
表示离指定日期最近的工作日。#
:#
字符在时间表达式中用于指定月份中的第几个星期几。例如,2#3
表示月份中的第三个星期二。?
:?
字符在时间表达式中用于指示日期字段(Day of month)或星期字段(Day of week)可以是任意值。它在某些情况下用于替代其他字段。例如,如果你想要在每月的第五个工作日执行任务,你可以使用?
代替星期字段,如? 5
。
这些特殊字符可以用于增加时间表达式的灵活性和精确度,以满足特定的需求。在实际使用中,它们的解释可能会因不同的调度器实现而有所差异,因此需要根据具体的调度器文档或工具来确认其准确的含义和用法。
cron表达式广泛应用于定时任务调度、自动化脚本、定时数据采集等方面。我们日常使用的青龙面板的定时任务即基于cron表达式进行设置。
总结
今天我们不仅掌握了如何定时启动和关闭容器,也掌握了时间表达式。这在之后NAS的使用中,将使我们的操作变得更加自如。
下期预告:常用docker命令全总结。
这就是本期的全部内容了,如果这篇文章对你有帮助的话,欢迎你在评论区多多讨论,也欢迎关注、点赞、打赏一键三连,你的支持对我非常重要。
我是冥冰薇,点个关注不迷路,我们下期再见。
阅读更多NAS存储精彩内容,可前往什么值得买查看
","gnid":"99d89278fd36aed52","img_data":[{"flag":2,"img":[{"desc":"","height":"239","title":"","url":"https://p0.ssl.img.360kuai.com/t011ce8861b2638f945.jpg","width":"600"},{"desc":"","height":"140","title":"","url":"https://p0.ssl.img.360kuai.com/t017ccfa45e25018c85.jpg","width":"600"},{"desc":"","height":"312","title":"","url":"https://p0.ssl.img.360kuai.com/t01af78a17d37309fec.jpg","width":"600"},{"desc":"","height":"148","title":"","url":"https://p0.ssl.img.360kuai.com/t0179f6923b5c591c8f.jpg","width":"600"},{"desc":"","height":"130","title":"","url":"https://p0.ssl.img.360kuai.com/t01537205df543d872e.jpg","width":"574"},{"desc":"","height":"578","title":"","url":"https://p0.ssl.img.360kuai.com/t0175a269e15294acca.jpg","width":"600"},{"desc":"","height":"597","title":"","url":"https://p0.ssl.img.360kuai.com/t01d8a3ba7192c6bd29.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1684837897000,"pure":"","rawurl":"http://zm.news.so.com/514010920fea7257c32185a4aac88e5c","redirect":0,"rptid":"691e03be15d17d6b","rss_ext":[],"s":"t","src":"什么值得买","tag":[],"title":"docker妙用 篇八:如何定时启动和停止docker容器
政东祁2158请你描述下crontab的作用和语法,以及书写定时任务注意的要点. -
牧杨栏15044243071 ______ 设置crontab后我们可以使得Linux主动执行的在固定的间隔时间,执行指定的系统指令或 shell script脚本.生产环境可以用来日志分析或生产备份等. 语法格式: crontab [ -u user ] file ===》-u的意思就是指定用户 crontab [ -u user ] { -l 显示文件内...
政东祁2158使用crontab,定时执行一个python脚本,怎么不能用 -
牧杨栏15044243071 ______ 注意两点:1. crontab 不会有你设的环境变量2. crontab 要用绝对路径 正确做法写一个shell脚本,在脚本内设置环境变量及执行python语句,然后crontab执行该脚本.123 #/usr/bin/bash PATH=/home//Python-3.3.3:/home//Python-3.3.3/bin:$PATH python /home/xxx.py
政东祁2158linux定时任务crontab怎么启动 -
牧杨栏15044243071 ______ crontab 需要由root用户部署,“su - " 切换到root; ”crontab -e" 进入crontab 编辑状态; 输入" * * * * * /usr/bin/bash /home/ganlin/ganlin.sh", 这代表每秒执行一次脚本. 部署完成后 输入 ”crontab -l" 查看crontab 中所有部署的内容; 脚本最好不要放在/home目录下,可以在脚本中写入一行标准输出用来在部署完成后测试结果用. “> /dev/null 2>&1“ 这样写得结果是就看不到标准输出了, /dev/null 代表一个虚拟的设备 把标准输出写到一个不存在的设备中去了.
政东祁2158我想在linux用c搞个 定时程序然后可以指定时间运行程序.时间是小时和分钟的.主要是分钟要可以累加.比如 -
牧杨栏15044243071 ______ crontab -e ,然后,输入 * */1 * * * 这个是每隔一个小时,执行一次...楼主需要的情况,at,crontab 都是无法完全满足的,因为,crontab 每次执行,只能是每隔一段时间(但是间隔时间都是相同的),或者在某个时刻,楼主这种,情况很特殊,估计,需要,编写c 程序,才可以搞定的...
政东祁2158LINUX系统时间怎么设置同步脚本或命令 -
牧杨栏15044243071 ______ 使用crontab定时任务crontab-e进入编辑基本格式:*****command分时日月周命令第1列表示分钟1~59每分钟用*或者*/1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行...
政东祁2158主机的定时提供试行任务的功能怎么设置?
牧杨栏15044243071 ______ 美国服务器IXWebHosting主机和其它大多数主机一样也提供定时执行任务的功能,即Cron Jobs功能.那么什么是Cron Jobs呢?Cron Jobs又有哪些作用呢?Cron是一个守护程式,用于在指定的时间内执行固定行程类的任务,在Linux系统上每...
政东祁2158linux 怎么定crontab -
牧杨栏15044243071 ______ 1.作用 使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户.2.格式 crontab [-u user] {-l | -r | -e}3.主要参数-e:执行文字编辑器来设定时程表,内空的文字编辑器是vi-r:删除目前...
政东祁2158linux 脚本编程 定时关闭和打开程序 -
牧杨栏15044243071 ______ 1、利用crontab 制定定时任务2、编写定时关闭和打开程序的脚本或命令3、crontab的用法 第1列分钟1~59 第2列小时1~23(0表示子夜) 第3列日1~31 第4列月1~12 第5列星期0~6(0表示星期天) 第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令或脚本30 21 * * * /usr/local/apache/bin/apachectl restart 上面的例子表示每晚的21:30重启apache
政东祁2158如何实现一个定时任务来对数据库中的数据进行操作 -
牧杨栏15044243071 ______ 写个脚本 用crontab设置每小时执行一次,sql语句如下:delete from tbname order by search_time desc limit 11,1000 如果数据超过1000可以再大点.
政东祁2158crontab修改后需要重启吗 -
牧杨栏15044243071 ______ 不需要. crontab -l 列出当前登录用户所有定时任务 crontab -l -u XXX 列出XXX用户的所有定时任务,如有没有会提示 no crontab for XXX crontab -e 编辑当前用户的定时任务 crontab -r 删除当前用户的定时任务 查看crontab的执行情况: tail -f ...