crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程。
crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度
用户任务调度
一般用来进行启动定期运行的进程、周期性地日志分析和数据备份。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
在以上各个字段中,还可以使用以下特殊字符:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
-u user:用来设定某个用户的crontab服务,例如,“-u gtq”表示设定gtq用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
当需要新建一个定时任务时,执行crontab -e
即可,第一次运行时会提示选择一个编辑器,根据需要选择即可。
根据需求编辑文件,保存退出即可。
* * * * * echo "test" >> /home/a
*/5 * * * * echo "test" >> /home/a
6,18 * * * * echo "test" >> /home/a
6,18 8-15 * * * echo "test" >> /home/a
6,18 8-15 */3 * * echo "test" >> /home/a
6,18 8-15 * * 1 echo "test" >> /home/a
20 3 1,10,11 * * /etc/init.d/smb restart
0,30 18-23 * * * /etc/init.d/smb restart
* 23-7/1 * * * /etc/init.d/smb restart
0 0 4 * mon-wed /etc/init.d/smb restart
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量。
编写脚本时应注意以下几点:
在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。
crontab -r
从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
参考资料:
每天一个linux命令(50):crontab命令