什么是cron
cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,可以在无需人工干预的情况下运行作业。当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
cron把命令行保存在/etc/crontab文件里,每个系统用户如果设置了自己的cron,那都会在/var/spool/cron下面有对应用户名的crontab。无论编写/var/spool/cron目录内的文件还是/etc/crontab文件,都能让cron准确无误地执行安排的任务,区别是/var/spool/cron下各系统用户的crontab文件是对应用户级别的的任务配置,而/var/crontab文件则是对应系统级别的任务配置。cron服务器每分钟读取一次/var/crontab/cron目录内的所有文件和/etc/crontab文件。
cron服务管理
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
你也可以将这个服务在系统启动的时候自动启动:在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service crond start
crontab命令
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u user//设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
crontab file //用指定的文件替代目前的crontab
crontab脚本格式说明
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
参数说明
- minute: 表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
一些crontab脚本实例
* * * * * command //每1分钟执行一次command
3,15 * * * * command //每小时的第3和第15分钟执行
3,15 8-11 * * * command //在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command //每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command //每个星期一的上午8点到11点的第3和第15分钟执行
30 21 * * * /etc/init.d/smb restart // 每晚的21:30重启smb
45 4 1,10,22 * * /etc/init.d/smb restart //每月1、10、22日的4 : 45重启smb
10 1 * * 6,0 /etc/init.d/smb restart //每周六、周日的1 : 10重启smb
0,30 18-23 * * * /etc/init.d/smb restart //每天18 : 00至23 : 00之间每隔30分钟重启smb
* */1 * * * /etc/init.d/smb restart //每一小时重启smb
一些注意事项
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。
> 9 9 * * * /usr/local/bin/cvsb > /dev/null 2>&1
一种经常碰到的情况,需要执行的文件没问题,但通过cron就是死活不能正确执行,这时我们可以通过输出重定向将cron的执行过程输出到一个文件,通过分析执行过程来寻找错误的原因。
> 9 9 * * * /usr/local/bin/cvsb > /var/log/crontab_log 2>&1