这是100个 Linux 命令的第76个命令,关于如何编写计划任务条目。
crond 是一个daemon 类进程,路径为/usr/sbin/crond。默认会以后台方式启动,service 或 systemd 方式启动 crond 默认也是后台方式。
crond file 是定义定时任务条目的文件。存在于多处,包括系统定时任务文件/etc/crontab 和 /etc/cron.d/*,还有独属于各用户的任务文件/var/spool/cron/USERNAME。
crontab 是管理 crond file 的工具
选项 | 说明 |
---|---|
-l | 列出定时任务条目 |
-r | 删除当前任务列表中断所有任务条目 |
-i | 删除条目时提示是否要删除 |
-e | 编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件 |
-u | 操作指定用户的定时任务 |
如:
crondtab -e #编辑当前用户位于 /var/spool/cron 下的 crond file
* * * * * /bin/echo "the first cron entry" >> /tmp/crond.txt
这将会每分钟执行一次echo命令,将内容追加到/tmp/crond.txt文件中。
定义计划的方法在/etc/crontab 文件中,此文件中定义了三个变量:PATH、SHELL、MALLTO
每个任务条目分为6段,每段以空格分隔,之所以这里会显示 user-name 是因为/etc/crontab 是系统定时任务文件,一般的定时任务没有该段。
前5段用于设定时间(执行频率),分别表示每分钟、每小时、每天、每月、每星期几。
“*”表示从每个时间段的开始到结束。例如在小时上设置*,表示0,1,2,3...22,23的意思。
每个时间段,都可以使用逗号“,”表示枚举,如“0,30,50 * * * *”表示每个小时的整点、第30分钟、第50分钟都指定该任务。
每个时间段,都可以使用“-”定义范围,可以结合逗号使用,如“00,20-30,50”表示每个小时的整点,20-30分钟的每分钟,第50分钟都执行指定任务。
每个时间段,使用“/”表示忽略时间,如在小时段定义了“0-13/2”表示在"0/2/4/6/8/10/12"点才满足时间定义。
常使用"*/N"表示每隔多久的意思。例如"00 */2 * * *"表示在每天每隔两小时的整点执行该任务(严格地说是0-23/2,也就是0,2,4,...,22,所以凌晨1点不会执行任务)。
如果定义的日和周冲突了,则会多次执行(不包括因为*号导致的冲突)。例如每月的15号执行该任务,同时又定义了周三执行该任务,正常无冲突情况下,将在周三和每月15号执行,但如果某月的15号同时是周三,则该任务在此日执行两次。因此,应该尽力避免同时定义周和日的任务。
命令段(即第6段)中,不能随意出现百分号"%",因为它表示换行的特殊意义,且第一个%后的所有字符串将当作命令的标准输入。在定时任务条目中若以时间定义文件名时,应当将%使用反斜杠转义。如:
* * * * * cp /etc/fstab /tmp/`date +\%Y-\%m-\%d`.txt
另外一个需要注意的时间段设置是,使用*号问题。例如"* */2 * * *",它表示每隔两小时后的每一分钟都执行任务,也就是凌晨0点的每分钟执行任务,凌晨1点不执行任务,凌晨2点的每分钟执行任务,凌晨4点的每分钟执行任务,依此类推。同理,"*/5 */2 * * *"表示每隔2小时后的每5分钟执行一次任务。
crondtab file 是任务的定义文件。
crond 默认在后台运行,任务执行成功与否不会提示,可以让 crond 运行在前端进行调试。再次说明的是,crond守护进程是与终端无关的。
一般用法:crond [-n] [-P] [-x flags]
选项 | 说明 |
---|---|
-n | 让 crond 以前端方式运行 |
-P | 不重设环境变量 PATH,而是从父进程中继承 |
-x | 设置调事项,flags 是调试方式 “-x test”:调试不会真正执行 “-x sch”:调试显示调试信息,可以看到等待时间 “-x test,sch” |
在sch调试结果中的等待时间是crond这个daemon的检测时间,所以它表示等待下一次检测的时间,因此除了第一次,之后每次都是60秒,因为默认crond是每分钟检测一次crontab file的。这样在调试定时任务时间时,也不会真正执行命令。
参考链接:http://www.cnblogs.com/f-ck-need-u/p/7059418.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。