crontab 让您以特定的时间间隔执行命令,而且您还不需要登录。crontab 会将您指定命令的输出通过电子邮件寄送给您。您可以以分钟、小时、天、甚至月来指定间隔。根据选项不同,crontab 的功能会有一定的区别:
让我们首先来编辑一个 crontab
。如果您输入 crontab -e,您将会看到您所偏爱的文本编辑器。至于是何编辑器,取决于您在 EDITOR
或 VISUAL
环境变量中设置的值,如果没有设置的话将会使用 Vi。crontab
文件中的每一行都由六个部分组成。前五个部分是时间间隔,分别对应分钟、小时、月中的天数、月份以及一周中的天数。第六部分是要执行的命令。以 #
开头的行将被当作注释,crond(担负着执行 crontab
文件的程序)会将其忽略。这一格式同保存在 /etc/crontab
的系统 crontab
文件略有差别。其中,第六部分是用户名,系统会以该用户来执行第七部分中的程序。它仅用于执行系统维护任务,以及执行那些仅为了系统安全考量而存在的用户(比如方病毒用户或是运行数据库服务的用户)的任务。以下是 crontab
的一个例子:
![]() | 注意 |
---|---|
为了让输出更加易读,我们打断了较长的行。不过您在输入的时候一定要确保它们出现在一行上。如果您在行尾遇到了 \ 字符,就应该知道下一行是紧接着上一行的。这种情况同样适用于 |
# 如果您不想发送邮件,只需取消以下行的注释 #MAILTO="您的电子邮件地址" # # 每两天在下午两点报告上例中的新图像。然后, # 再重新"touch" "stamp"文件。"%"将被当作 # 换行符,这允许您在同一行放置多个命令。 0 14 */2 * * find /shared/images \ -cnewer /shared/images/stamp \ -a -iregex ".*\.jpe?g" \ -a -not -regex \ ".*/old/.*"%touch /shared/images/stamp # # 每个圣诞节播放一首歌 :) 0 0 25 12 * mpg123 $HOME/sounds/merryxmas.mp3 # # 每个星期二下午五点,打印购物清单... 0 17 * * 2 lpr $HOME/shopping-list.txt
除了本例中的之外,还有好几种不同的方法指定间隔。例如,您可以指定一组中间用逗号分开的离散值(1,14,23
),也可以使用范围(1-15
),甚至组合二者使用(1-10,12-20
),并可使用步进增量(1-12,20-27/2
)。现在该您自己将理论付诸实践了!
您可能想要只在某一天执行一条命令,但并不定期执行。例如,您今天晚上六点有个约会,希望计算机能够提醒您注意。您运行了 X,而且也安装了 X11R6-contrib
软件包,而您想要在五点半的时候得到计算机的通知。at 在这种情况下就能帮到您:
$ at 5:30pm # 您现在应该看到"at"提示符 at> xmessage "现在该走了!六点有约会" # 按 CTRL-d 可退出 at> <EOT> job 1 at 2005-02-23 17:30 $
now + <间隔>
:意味着自现在起指定间隔后(可选。未指定间隔代表现在)。间隔的语法为 <n> (minutes|hours|days|weeks|months)
。例如,您可以指定 now + 1 hour
(自现在起一小时后),now + 3 days
(自现在起三天后)等等。
<时间>
<日期>
:完整的指定日期。<时间>
参数是必需的。at 能够非常智能地接受您所给出的任何时间参数:您可以输入 0100
、04:20
、2am
、0530pm
、1800
或者以下三个特殊值:noon
(中午十二点)、teatime
(下午四点)和midnight
(午夜十二点)。<日期>
参数是可选的。您也可以用不同的方式来表示同一个日期,比如 2001年12月20日可以写为 12/20/2001
,或者欧洲格式 20.12.2001
。您可以省略年份,但此时只能接受欧洲格式:20.12
。您还可以用完整的字母来指定月份:Dec 20
或 20 Dec
,这都是可以的。