Linux的例行任务包含两种:一种是需要周期执行的任务其命令为cron;另外一种是在某个特定时间执行一次的任务,其命令为at。

使用at在特定时间执行一次任务

当前时间后多长时间执行一次任务:

1# at now + 3 minutes
2at> echo hello > hello.txt
3at> <EOT>
4job 1 at Mon Dec 22 18:29:00 2014

<EOT>是输入组合键CTL+D

指定在某个特定的时间执行一次任务:

1# at 19:00 2014-12-22
2at> echo hello > hello.txt
3at> <EOT>
4job 1 at Mon Dec 22 19:00:00 2014

查看任务队列:

1atq
21       Mon Dec 22 18:29:00 2014 a root

删除任务atrm <任务编号>

1atrm 1

默认情况下,所有用户都可以使用at命令来调度自己的任务,如果需要禁用某个用户使用此功能,可以将该用户名添加到/etc/at.deny中。

使用crontab周期性执行任务

要使用crontab需要保证crond进程正在运行:

1systemctl status crond
2● crond.service - Command Scheduler
3   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
4   Active: active (running) 

如果没有运行需要启动此进程:

1systemctl start crond
2systemctl enable crond

在使用crontab之前先来熟悉一下cron的语法:

1分 时 日 月 星期 要运行的命令
2第1列分钟0~59
3第2列小时0~23(0表示子夜)
4第3列日1~31
5第4列月1~12
6第5列星期0~7(0和7表示星期天)
7第6列要运行的命令

接下来使用crontab命令设置计划任务crontab [-u user] file crontab [-u user] [ -e | -l | -r ]:

  • -u user:用来设定某个用户的crontab服务
  • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件
  • -i:在删除用户的crontab文件时给确认提示

创建或编辑计划任务:

1crontab -e
2
30-59 * * * * date >> /root/date.txt

查看计划任务:

1crontab -l
20-59 * * * * date >> /root/date.txt

默认情况下,所有用户都可以设置自己的crontab,如果需要禁用某个用户使用此功能,可以将该用户名添加到/etc/cron.deny中。