一、Linux任务计划 1、一次性任务计划执行: (1)at (2)batch 2、周期性任务执行: (1)crontab (2)anacron 二、一次性任务执行 1、at命令: 分类: (1)交互式:让用户在at>提示符下输入多个要执行的命令 (2)批处理:将任务的个命令写入文件由at进行调用 2、at交互式处理常用格式: at TIME (1)在at>下输入命令即可 (2)按Ctrl+D可提交任务(作业) (3)例: # at 3:44 at> cat /etc/fstab 按Ctrl+D at><EOF> 3、查看任务命令 (1)格式:at -l (2)命令atq也可以实现查看任务队列 (3)例: # at -l 11 2016-11-04 02:55 a root 任务号 时间 队列字母 发起任务者 4、添加任务队列 (1)格式:at -q 字母 TIME (2)例: # at -q a 03:55 # at> cat /root/hh.sh # at -l 5、删除一个尚未执行的作业 (1)格式:at -d job_num (2)或者用atrm命令:atrm job_num (3)例: # at -l 先查看 # at -d 14 # at -l 检查 或者 # atrm 14 # at -l 6、at批处理常用格式: (1)at -f /PATH/TO/FILE TIME (2)例: # vim /root/at.txt cat /etc/fstab ls 保存退出 # at -f /root/at.txt 4:50 # at -l 检查 7、TIME的指定方式 (1)模糊时间: ①now ②noon(中午12点) ③midnight(晚上12点) ④teatime(下午4点) ⑤tomorrow (2)例: # at now+3min 可制定3分钟后的作业 # at -q a noon 可指定任务队列为a,中午的作业。 # at -f /root/at.txt now+1day 可指定从现在开始后的一天执行批处理任务 # at -f /root/at.txt now+2days 可指定从现在开始后的两天执行批处理任务 (3)TIME的指定十分灵活,具体可参照man手册。 8、任务的执行结果会通过邮件的方式发送给任务提交者 (1)使用mail命令:交互模式查看处理接收邮件 (2)交互模式发送邮件 ①指定发送主题:mail -s “suject” 接收者 ②可用输入重定向指定发送内容:< /path/to/somefile 例: ③可通过管道来提交邮件内容: 例: # echo -e "Hello\nking" | mail -s "hello,buddy" root 9、batch命令 (1)特点:与at不同的是,不能指定时间:它自动选择系统空闲时间执行。 10、文件/etc/at.deny 为at命令作业控制列表(黑名单),可以定义谁能使用at命令,谁不能使用。 (1)写入用户名,该用户就不能使用at命令 (2)例: # vim /etc/at.deny hadoop 保存退出 # su - hadoop $ at 14:30 显示结果: You do not have permission to use at. 二、周期性任务计划(默认以分钟为最小单位) 1、cron (1)crond:守护进程,运行在后台,随时监视着进程,等待执行。 服务进程的工作方式:阻塞、轮询 2、cron分类 (1)系统cron ①系统cron的配置文件在/etc/crontab。 ②文件内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed ③上述文件内容中的时间表示法: a、每个时间位都应该使用其取值范围内的值。 b、某时间位上的*表示对应位的所有有效取值。 c、- 表示连续的相邻时间点的取值。 例: 30-35 7 * * * /bin/echo "hello" 表示每天7点30分~7点35分执行一次echo "hello"任务 d、, 表示离散的时间点取值 例: 5,35 * * * * /bin/echo "hello" 表示每小时第5分,第35分执行一次echo "hello"任务。 e、/# 表示在指定时间范围内每隔#分钟执行一次任务 例: 5-45/3 * * * * /bin/echo "hello" 表示每小时的5分~45分内,每隔三分钟执行一次echo "hello"任务。 0 */2 * * * /bin/echo "hello" 表示在每天的0分开始,每隔两小时执行一次echo "hello"任务 ④每次任务执行后的结果都会发送去MAILTO指定的用户邮箱中去 ⑤注意:可以通过输出重定向或者指定MIALTO为空而拒收邮件 例: 0 */2 * * * /bin/echo "hello" &> /dev/null 或者指定MAILTO指定为空拒收邮件 # crontab -e MAILTO="" 保存退出 (2)用户cron ①使用crontab命令实现 选项: -l:查看自己的cron任务列表 # crontab -l -e:通过EDITOR变量中定义的编辑器,打开用户自己的cron配置文件 编辑单独的任务都使用-e选项,无论删除,修改还是新建 例: # crontab -e */3 * * * * /bin/echo "Hello." -r:移除crontab文件 # crontab -r (3)如果是管理员 ①可以使用命令:crontab -e -u UserName 为别的用户配置cron作业 ②例: # crontab -e -u hadoop */3 * * * * /bin/echo "hello" 保存退出 (4)提醒:如果在crontab -e命令下编辑命令时使用%,得转义\% 例: # crontab -e 5 * * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt 保存退出 或者在使用单引号括起使用%的部分,%可以不用转义 例: # crontab -e 5 * * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt (6)如何使用秒级别任务 ①如果只使用该格式 # crontab -e */21 * * * * /bin/echo "how are you?" 每分钟每隔21秒执行一次echo “hello”任务,但是,最后的21并不是完全相隔了21秒,而是18秒,有所误差。 ②可以使用下列格式解决上述问题: # crontab -e * * * * * fori in {0..4};do /bin/echo "how are you?";sleep 21;done 或者 */21 * * * * while true;do /bin/echo "how are you";sleep 21;done ③建议以秒级别任务用脚本实现 3、anacron (1)最小刻度是天。在/etc/anacron文件下配置。 (2)anacron是crontab的补充,用于检查crontab中某任务在过去一个周期内是否没有执行,如果没有执行,则在开机以后的某时间点让其执行一次,无论周期是否到达。 三、重点总结: 1、at命令的使用 2、crontab命令的使用 3、crontab中的时间表示法: 4、crontab中的PATH环境变量 5、在时间表示法中,从左到右的*号为低到高 则如果高级的*号有值,低级的*号一定要有具体值。 例: 0 3-18/3 * * * /bin/echo "Hello" 其中0那个时间位必须要有!!! (责任编辑:IT) |