命令行启动规划

crontab:报告或编辑您的 crontab 文件

crontab 是一个命令,它允许您以特定的时间间隔执行命令,而且您还不用到时登录。crontab 会将您命令的输出通过电子邮件寄送给您。您可以以分钟、小时、天、甚至月来指定间隔。根据选项不同,crontab 的功能会有一定的区别:

  • -l:打印您当前的 crontab 文件。

  • -e:编辑您的 crontab 文件。

  • -r:删除您当前的 crontab 文件。

  • -u <用户>:将上述选项应用到<用户>。只有 root 可执行此操作。

让我们首先来编辑一个 crontab。如果您输入 crontab -e,您将会看到您喜爱的文本编辑器。至于是何编辑器,取决于您在 EDITORVISUAL 环境变量中设置的值,如果没有设置的话将会使用 Vicrontab 文件中的每一行都由六个部分组成。前五个部分是时间间隔,分别对应分钟、小时、月中的天数、月份以及一周中的天数。第六部分是要执行的命令。以 # 开头的行将被当作注释,crond(担负着执行 crontab 文件的程序)也会将其忽略。这里是 crontab 的一个例子:

[Note]注意

为了让输出更加美观,我们打断了较长的行。不过您在输入的时候一定要确保它们出现在一行上。如果您在行尾遇到了 \ 字符,就应该知道下一行是紧接着上一行的。这种情况同样适用于 Makefile 文件、shell 以及其它环境。

# 如果您不想发送邮件,只需取消以下行的注释
#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)。现在该您自己将理论付诸实践了!

at:将命令排入计划,但只有一次

您可能想要在某一天的特定时间执行一条命令,但并不经常执行。例如,您今天晚上六点有个约会,希望计算机能够提醒您注意。您运行了 X,而且也安装了 X11R6-contrib 软件包,而您想要在五点半的时候,计算机通知您该走了。at 在这种情况下就能帮到您:

$ at 5:30pm
  # 您现在应该看到“at”提示符
at> xmessage "现在该走了!六点有约会"
  # 按 Ctrl-D 可退出
at> <EOT>
$

您可以以不同的方式指定时间:

  • now + <间隔>:意味着自现在起指定间隔后(可选。未指定间隔代表现在)。间隔的语法为 <n> (minutes|hours|days|weeks|months)。例如,您可以指定 now + 1 hour(自现在起一小时后),now + 3 days(自现在起三天后)等等。

  • <时间><日期>:完整的指定日期。<时间>参数是必需的。at 能够非常智能地接受您所给出的任何时间参数:您可以输入 010004:202am0530pm1800 或者以下三个特殊值:noon(中午十二点)、teatime(下午四点)和midnight(午夜十二点)。<日期>参数是可选的。您也可以用不同的方式来表示同一个日期2001年12月20日,比如:12/20/2001,或者欧洲格式 20.12.2001。您可以省略年份,但此时只能接受欧洲格式:20.12。您还可以用完整的字母来指定月份:Dec 2020 Dec,这都是可以的。

at 还能接受不同的选项:

  • -l:打印当前队列中的任务列表;第一部分是任务编号。这等同于 atq 命令。

  • -d <n>:从队列中删除编号为 <n> 的任务。您可以从 atq 中获得任务编号。这等同于 atrm <n>

如同往常一样,更多选项请您查看 at(1) manpage