crontab是Unix/Linux上的“计划任务”,可以在指定的时间,以指定的身份,运行指定的任务。
crontab有两级,一个是系统级的,一个是用户级的。
系统级的配置文件在:/etc/crontab,用vi打开,里面会有些环境变量的设置,包括PATH在内,以便cron守护进程查找指定的程序。
最需要关心的是下面的内容,每行一个任务,具体的格式是:
比如:
0 1 * * * root ls –l /var/log > /root/ls.txt
表示:
(1)每天1点钟开始执行命令
(2)以root用户执行命令
(3)执行的命令为:ls –l /var/log > /root/ls.txt
说明:
(1)*号表示所有,上面的例子中,日、月、星期都是星号,表示每天都执行,如果每月一号两点钟执行一次,则时间部分变为:
0 2 1 * *
(2)如果是周期性的执行,比如每5分钟执行一次,则加上一个“/”,比如:
*/5 * * * *
再如每周一零点定时执行:
0 0 * * 1
如果设置为这样是什么效果呢?
* * * * 1
那就麻烦了,周一每分钟执行一次。
(3)命令部分,可以带空格、重定向等字符,但最好用绝对路径,因为PATH设置不同,可能会找不到你指定的程序,并且cron只执行这个命令,并不返回执行的结果。
查看crontab是否执行,最好看/var/log/cron,所有执行过的命令,都会在里面显示出来:
# tail -n 20 /var/log/cron
Jun 28 08:42:01 638065 CROND[27988]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 09:42:01 638065 CROND[32375]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 10:42:01 638065 CROND[4424]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 11:42:25 638065 crond[1351]: (CRON) STARTUP (1.4.4)
Jun 28 11:42:25 638065 crond[1351]: (CRON) INFO (running with inotify support)
Jun 28 12:42:01 638065 CROND[1194]: (root) CMD (/bin/ls –l /var/log)
Jun 28 12:38:49 638065 crond[1182]: (CRON) STARTUP (1.4.4)
Jun 28 12:38:49 638065 crond[1182]: (CRON) INFO (running with inotify support)
Jun 28 12:42:01 638065 CROND[1194]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 13:42:01 638065 CROND[1206]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 14:42:02 638065 CROND[1217]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 15:42:01 638065 CROND[1228]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 16:42:01 638065 CROND[1239]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 17:42:01 638065 CROND[1250]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 18:42:01 638065 CROND[1261]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 19:42:01 638065 CROND[1294]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 20:42:01 638065 CROND[1307]: (root) CMD (run-parts /etc/cron.hourly)
Jun 28 21:42:01 638065 CROND[1336]: (root) CMD (run-parts /etc/cron.hourly)
用户级的比较常用,普通用户登录后,运行contab –e,会出来一个vi的编译框,里面也许什么也没有,这是正常现象。
格式跟/etc/crontab相比,就少一个“用户名”段,其他相同,还是上面的例子,每天一点钟执行一下ls:
0 1 * * * ls –l /var/log > /root/ls.txt
注意没有了用户名。
查看计划任务,可以用crontab –l命令:
% crontab -l
0 1 * * * ls –l /var/log > /root/ls.txt
超级用户可以查看其他用户的任务:
crontab –u aa –l
注意:系统级的计划任务不会出现在crontab –l中。
该贴由hui.chen转至本版2014-11-5 17:04:58