Cron工作简介

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 / 21,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作业语法。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏