Cron工作简介
版本1.0
作者:Falko Timme
本文简要介绍cron作业,其语法以及如何设置它们。 cron作业是由系统在指定的时间/日期执行的计划任务。
我不会保证这将为您工作!
1个crontab
创建/编辑,列出和删除cron作业的命令是crontab
。 如果使用-u
选项调用它,它将指定要调整其crontab的用户的名称。 如果没有给出这个选项,crontab会检查“你的”crontab,即执行命令的人的crontab。 如果你以root身份徘徊,运行没有-u
的crontab,那么root的crontab被列出/修改/删除。 如果您以exampleuser
身份登录并运行不带-u的
crontab
,那么exampleuser
的crontab将被列出/修改/删除。
例子:
crontab -l
列出您当前登录的用户的cron作业:
server1:~# crontab -l
* * * * * /usr/local/ispconfig/server/server.sh > /dev/null 2>> /var/log/ispconfig/cron.log
30 00 * * * /usr/local/ispconfig/server/cron_daily.sh > /dev/null 2>> /var/log/ispconfig/cron.log
server1:~#
crontab -u exampleuser -l
列出exampleuser的
所有cron作业。
crontab -e
让我们来创建/修改用户当前登录的cron作业(我将在下一章中介绍语法)。
crontab -u exampleuser -e
让我们来创建/修改exampleuser
的cron作业。
crontab -r
删除用户当前登录的所有cron作业。
crontab -u exampleuser -r
删除exampleuser的
所有cron作业。
如果您将cron作业写入文本文件,则可以使用文本文件创建cron作业。 例如,假设您已创建文本文件/tmp/my_cron_jobs.txt
...
vi /tmp/my_cron_jobs.txt
...有以下内容:
30 00 * * * /path/to/script |
您可以从该文件创建一个cron作业,如下所示:
crontab /tmp/my_cron_jobs.txt
(或者例如用户:
crontab -u exampleuser /tmp/my_cron_jobs.txt
)
请注意,这将覆盖以前创建的所有cron作业 - 如果您已经创建了一些cron作业,则最好使用crontab -e
并手动添加新的cron作业。
看到
man crontab
了解更多关于crontab
命令。
2 Cron作业语法
cron工作由六个字段组成:
<minute> <hour> <day of month> <month> <day of week> <command>
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
当指定星期几时,第0天和第7天将被视为星期天。
字段可能是星号( *
),始终代表最后一个。
名称也可以用于“月”和“星期几”字段。 使用特定日期或月份的前三个字母(例如无关紧要),例如星期日的太阳
或SUN
或三月的MAR
/ MAR
。
我们来看看第一章的两个cron工作:
* * * * * /usr/local/ispconfig/server/server.sh> / dev / null 2 >> /var/log/ispconfig/cron.log
这意味着:每分钟执行一次/usr/local/ispconfig/server/server.sh> / dev / null 2 >> /var/log/ispconfig/cron.log
。
30 00 * * * /usr/local/ispconfig/server/cron_daily.sh> / dev / null 2 >> /var/log/ispconfig/cron.log
这意味着:每天在00:30h执行一次/usr/local/ispconfig/server/cron_daily.sh> / dev / null 2 >> /var/log/ispconfig/cron.log
。
命令执行的日期可以由两个字段指定:月的日期和星期几。 如果两个字段都被限制(即不是*),则当任一字段与当前时间匹配时,该命令将被运行。 例如, 30 4 1,15 * 5
将导致命令在每个月的1日和15日4时30分
,加上每个星期五。
您可以使用范围来定义cron作业:
例子:
1,2,5,9
- 表示每第一,第二,第五和第九(分,时,月,...)。
0-4,8-12
- 表示从0到4和从8到12的全部(分钟,小时,月份,...)。
* / 5
- 表示每五分钟(分钟,小时,月份,...)。
1-9 / 2
与1,3,5,7,9
相同。
不允许使用范围或名称列表(如果您在几个月和几天内使用名称而不是数字,例如Mon-Wed
无效)。
1,7,25,47 */2 * * * command
意思是:在第一,第七,第25和第47分钟的第二小时运行命令
。
除了前五个字段之外,可能会出现八个特殊字符串之一:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
您还可以在crontab中使用name = value
对来定义cron作业的变量:
# use /bin/bash to run commands, instead of the default /bin/sh SHELL=/bin/bash # mail any output to exampleuser, no matter whose crontab this is MAILTO=exampleuser # set the PATH variable to make sure all commands in the crontab are found PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * my_command
请注意:除非在crontab中设置PATH
变量,否则始终在crontab中使用完整路径 ,以确保找到并可以执行命令。 例如,您不应该编写rsync
,而应该写入/ usr / bin / rsync
。 使用哪个
来找出程序的完整路径:
which rsync
server1:~# which rsync
/usr/bin/rsync
server1:~#
看到
man 5 crontab
了解更多关于cron作业语法。