Loading... <h3><span style="font-family: 宋体, SimSun;font-size: 14px"><strong><span style="font-family: 宋体, SimSun">概述</span></strong></span></h3> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 任务计划其实就是针对未来的某一刻或者是某一周期内设置要执行的工作;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 任务计划分为两种:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 1、一次性任务:在指定的未来的某个时间点仅执行一次任务;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 命令:at batch</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 2、周期性任务:根据设置的时间循环工作。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 命令:crontab</span></p> <h4><span style="font-family: 宋体, SimSun;font-size: 14px"><strong><span style="font-family: 宋体, SimSun;font-size: 20px">一次性工作调度</span></strong></span></h4> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong><span style="font-family: 宋体, SimSun;font-size: 18px">at命令</span></strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 使用at命令时,首先其服务atd必须开启,否则无法使用此命令。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180119-52.png" title="1427266262411735.png" alt="1.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 语法格式: at [-ldc] TIME </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 下面举例来说明at命令的用法:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><strong> 1、使用at命令来设置任务:</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180119-26.png" title="1427267682816851.png" alt="2.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 上面的命令表示:从现在起2分钟后执行ls /tmp命令,使用快捷键Ctrl+d来结束命令输入。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> at命令并不会把执行结果输出到屏幕上,而是默认给任务设置者发送邮件;每个用户被创建时系统都会默认为其创建邮箱,可以通过变量$MAIL来查看邮箱的路径,以root用户为例:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 可以看到root用户的邮箱路径</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180119-65.png" title="1427268068133965.png" alt="3.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 查看邮箱最下面的内容即为ls /tmp的结果</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180119-40.png" title="1427268375412087.png" alt="4.png" /><span style="font-family: 宋体, SimSun;font-size: 14px"> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 在上面的at命令中使用 now + 2 minutes来指定时间,下面详细说明时间的表示方法:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 绝对时间:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> HH:MM:表示在今日的HH:MM时执行任务,若设置任务时已经超过了此时间,则为明天的HH:MM执行。如:02:00。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> HH:MM YYYY-MM-DD:表示在某年某月某日的HH:MM执行任务。如:02:00 2015-03-25。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> HH:MM[am|pm] [Month] [Date]:表示某月某日的HH:MM执行任务。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 相对时间:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> now + # [minutes|hours|days|weeks]:表示从现在开始再过多少时间执行任务。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 模糊时间:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> noon:相当于12:00</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> midnight:相当于00:00</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> teatime:相当于4:00 pm</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> tomorrow:明天</span><span style="font-family: 宋体, SimSun;font-size: 14px"> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><strong> 2、查询已经设置的at任务</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180119-3.png" title="1427274153892780.png" alt="5.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 第一列为任务的编号,之所以是5和6是因为之前的at任务已经执行完成;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 第二列是任务执行的时间;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 最后一列表示任务的执行者为root。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 此命令相当于命令atq。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><strong> 3、</strong><strong>删除已经设置的at任务</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-42.png" title="1427274448717614.png" alt="6.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 删除编号为5的at任务。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 此命令相当于命令atrm。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong>4、查看at任务的工作内容</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-66.png" title="1427274637627600.png" alt="7.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 使用-c选项可以输出任务的工作脚本,其实此参数就是将/var/spool/at/目录中与任务相对应的文件显示了出来;使用at命令设置好的任务都会以/var/spool/at/目录中自动生成一个脚本文件,如下图:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-11.png" title="1427276095976857.png" alt="8.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-71.png" title="1427276132168216.png" alt="9.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 可以看到文件中a0000后的数字与任务编号相对应。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong> 5、at的权限</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> at使用/etc/at.allow和/etc/at.allow两个文件来控制权限。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 1、写在/etc/at.allow文件中的用户可以才能使用at; </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 2、如果/etc/at.allow不存在,查找/etc/at.deny文件,如果写在/etc/at.deny文件中则不能使用at,否则就有使用at的权限;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 3、如果两个文件都存在,则/etc/at.allow文件生效;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 3、如果两个文件都不存在,就只有root可以使用at命令。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体, SimSun;font-size: 18px"> <strong>batch命令</strong></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 功能与at相同,但不需要指定时间,自动选择系统空闲时运行计划任务。</span></p> <h4><span style="font-family: 宋体, SimSun;font-size: 14px"><strong><span style="font-family: 宋体, SimSun;font-size: 20px">周期性工作调度</span></strong></span></h4> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体, SimSun;font-size: 18px"><strong>crontab命令</strong></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 使用此命令必须确保crond服务是开启状态。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-81.png" title="1427277189103319.png" alt="10.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 语法格式:crontab [-u username] [-l|-e|-r]</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> -e:编辑crontab的工作内容;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> -u:只有root用户才能使用此参数,帮助其它用户建立任务;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> -l:查阅crontab的工作内容;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> -r:删除crontab的所有工作内容。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><strong> 1、编辑cron任务</strong></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 在第一次使用crontab -e命令进行编辑工作时,会发现这是一个空的文件,没有任何文字可供参考,那么任务怎么写呢?</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 系统提供了crontab的配置文件,打开/etc/crontab文件可以看到格式的说明:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703180120-58.png" title="1427277595660496.png" alt="11.png" /></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 文件上面的部分是定义的环境变量,这些环境变量已经在系统中都定义可以正常使用了,为什么还要在配置文件中再定义一次呢?</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 由于crontab定义的是周期性任务,在运行任务时并不能保证任务发起者处于系统登录状态,如果用户退出登录后,其对应的环境变量也被相应的取消了;那么任务运行的环境($SHELL),命令查找的路径($PATH)等信息就都无法读取,会造成任务的执行失败;在任务运行前先从配置文件中读取环境变量,就可以避免此问题的发生了。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 文件下面的部分是crontab任务的格式说明,我们根据配置文件的信息来说明crontab任务的格式。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> cron任务分为两类:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 1、系统cron任务</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">格式:分钟</span> <span style="font-family: 宋体;font-size: 14px">小时</span> <span style="font-family: 宋体;font-size: 14px">天</span> <span style="font-family: 宋体;font-size: 14px">日</span> <span style="font-family: 宋体;font-size: 14px">周几</span> <span style="font-family: 宋体;font-size: 14px">用户</span> <span style="font-family: 宋体;font-size: 14px">任务</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 2、用户cron任务</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">格式:分钟</span> <span style="font-family: 宋体;font-size: 14px">小时</span> <span style="font-family: 宋体;font-size: 14px">天</span> <span style="font-family: 宋体;font-size: 14px">日</span> <span style="font-family: 宋体;font-size: 14px">周几</span> <span style="font-family: 宋体;font-size: 14px">任务</span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> <span style="font-family: 宋体;font-size: 16px">时间的有效取值范围:</span> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><span style="font-family: 宋体;font-size: 14px"> 分钟:</span>0-59</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">小时:</span>0-23</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">天:</span> 1-31</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">月:</span> 1-12</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">周:</span> 0-7<span style="font-family: 宋体;font-size: 14px">,</span>0<span style="font-family: 宋体;font-size: 14px">和</span>7<span style="font-family: 宋体;font-size: 14px">都表示周日</span></span></p> <p><span style="font-size: 14px;font-family: 宋体, SimSun"></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 时间通配表示:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> * <span style="font-family: 宋体;font-size: 14px">:对应时间的所有有效取值</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px">,:离散时间点,</span> 10<span style="font-family: 宋体;font-size: 14px">,</span>40 * * * * <span style="font-family: 宋体;font-size: 14px">每小时第</span>10<span style="font-family: 宋体;font-size: 14px">分钟和第</span>40<span style="font-family: 宋体;font-size: 14px">分钟</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> – <span style="font-family: 宋体;font-size: 14px">:连续时间</span> 10 02 * * 1-5 <span style="font-family: 宋体;font-size: 14px">每周一到周五</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> / <span style="font-family: 宋体;font-size: 14px">:对应取值范围内每多久一次</span> */3 * * * * <span style="font-family: 宋体;font-size: 14px">每</span>3<span style="font-family: 宋体;font-size: 14px">分钟</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 例如:0 5 * * 1 表示每周一的5点钟;<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> * 5 * * 1 表示每周一的5:00-5:59的每一分钟</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span></p> <p><span style="font-size: 14px;font-family: 宋体, SimSun"> crontab的执行结果也会以邮件的形式发送到任务发起者的邮箱中。 </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 注意:crontab命令使用-e选项进行编辑时,实际上就是编辑/var/spool/cron/USERNAME(当前用户名)文件,以root为例:<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-59.png" title="1427331562508941.png" alt="5.png" /></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 但不要直接编辑此文件进行任务订制,因为使用-e选项可以自动识别语法错误,而使用vim直接打开文件进行编辑则没有此功能。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong>2、查看cron任务</strong><br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-22.png" title="1427330573779422.png" alt="1.png" /></span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> <strong> 3、为其它用户定义cron任务 </strong> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-38.png" title="1427330815829167.png" alt="2.png" /></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-97.png" title="1427330823110142.png" alt="3.png" /></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 4<strong>、删除所有的cron任务</strong><br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-6.png" title="1427330919702584.png" alt="4.png" /></span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 如果想要只删除某一条的任务,使用-e选项手动删除即可。<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong> 5、cron的权限</strong><br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 与at一样,cron也使用文件来定义用户的使用权限;<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> /etc/cron.allow :写入此文件的用户可以使用crontab,没有写入的用户则不可使用;<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> /etc/cron.deny :写入此文件的用户不可以使用crontab,没有写入的用户则可以使用;<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> /etc/cron.allow比/etc/cron.deny的优先级要高,同一账号在两个文件中同时出现时,以/etc/cron.allow为准。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <strong> 6、日志功能</strong><br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> cron执行的每一项任务都会被记录到/var/log/cron这个日志文件。<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-27.png" title="1427332072127861.png" alt="6.png" /></span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> <strong><span style="font-family: 宋体;font-size: 18px">anacron命令</span></strong> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 检查有没有过去一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次;</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 查看anacrontab配置文件</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> <span style="font-family: 宋体;font-size: 14px"><img src="//cto.wang/usr/uploads/2016/07/20160703180120-55.png" title="1427332871805745.png" alt="8.png" /></span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 配置文件中任务的四个值的含义:</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> period in days delay in minutes job-identifier command<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"><span style="font-family: 宋体;font-size: 14px"> 过去没执行的天数</span> <span style="font-family: 宋体;font-size: 14px">开机后第多少分钟数</span> <span style="font-family: 宋体;font-size: 14px">工作名称</span> <span style="font-family: 宋体;font-size: 14px">任务</span></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> 此命令在生产环境中基本用不到,此处不再进一步说明。<br /></span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span></p> <p><span style="font-family: 宋体, SimSun;font-size: 14px"> </span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信