Linux任务计划
Linux任务计划、周期性执行任务 未来某一时间点执行一次任务:at,batch 周期性计划任务:crontab 默认执行结果会通过邮件形式发送给用户
本地电子邮件服务
smtp:Simple Mail Transfer Protocol,既简单邮件传输协议,主要用于发送邮件 pop3:Post Office Protocol,邮局协议,用于收取邮件 IMAP4:Internet Mail Access Protocol,互联网邮件访问协议,其功用和pop3一致 mail命令: 用于发送或接收互联网邮件 MUA:Mail User Agent,用户收发邮件的工具程序 mailx [-s "SUBJECT"] username[@hostname] 邮件正文的生成: (1)交互式输入:.单独成行可以表示正文结束;Ctrl+d提交 (2)输入重定向: (3)通过管道;
at命令
at [OPTIONS...] TIME 常用选项: -l:显示作业队列,相当于atq -d:删除指定队列,相当于atrm -c:查看作业的详细内容 -m:当任务完成之后,将发邮件给用户,即使没有标准输出 -V:显示版本信息 -f /PATH/TO/SOMEFILE: 注意:作业执行结果是以邮件发送给提交作业的用户 TIME:定义出什么时候进行at 这项任务的时间 HH:MM 02:00 在今日的HH:MM 进行,若该时刻已过,则明天此时执行任务 HH:MM YYYY-MM-DD 04:00 2016-09-20 规定在某年某月的某一天的特殊时刻进行该项任务 noon, midnight, teatime(4pm) tomorrow now+#{minutes,hours,days, OR weeks} 在某个时间点再加几个时间后才进行该项任务 at的作业有队列,用单个字母表示,默认都是用a队列 执行方式: 1.交互式输入 2.输入重定向,从指定文件中读取 3.at -f /PATH/TO/SOMEFILE指定文件 at依赖于atd服务,需要启动atd服务才可运行at任务 at队列存放在/var/spool/at目录当中
at权限控制
/etc/at.{allow,deny}用于控制用户是否能执行at任务 白名单:/etc/at.allow默认不存在,只有该文件中的用户才可执行at任务 黑名单:/etc/deny拒绝该文件中用户执行at命令,而没有在at.deny文件中的用户则可执行 注意:如果at.deny和at.allow文件中同时定义了一个用户,则at.allow文件优先生效 注意:如果两个文件都不存在,则只有root用户才可执行at任务;或者at.allow文件存在且没有指定任何用户
周期性计划任务:crontab
服务程序: cronie:主程序包,提供了crond守护进程及相关辅助工具; 确保crond守护进程(daemon)处于运行状态; CentOS 7: systemctl status crond.service CentOS 6: service crond status 向crond提交作业的方式不用于at,它需要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器 直接编辑此文件;要用crontab命令 cron任务分为两类: 系统cron任务:主要用于实现系统自身的维护 手动编辑:/etc/crontab文件 用户cron任务: 命令:crontab命令 日志文件:/var/log/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 注意: (1)每一行定义一个周期性任务; * * * * *:定义周期性时间 user-name:运行任务的用户身份 command to be executed:任务 (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量 (3)执行结果邮件发送给MAILTO指定的用户 用户cron的配置格式:/var/spool/cron/USERNAME # 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 注意: (1)每行定义一个cron任务,共6个字段; (2)此处的环境变量不同于用户登录后获得的环境,因此,建议命令使用绝对路径,或者自定义PATH环境变量 (3)邮件发送给当前用户 时间表示法: (1)特定值; 给定时间点有效取值范围内的值; 注意:days of week和day of month一般不同时使用 (2)* 给定时间点上有效取值范围内的所有值;表"每..." (3)离散取值: 在时间点上使用逗号分隔的多个值; #,#,# (4)连续取值:- 在时间点上使用-连接开头和结束 #-# (5)在指定时间点上,定义步长: /#:#即步长; 注意: (1)指定的时间点不能被步长整除时,其意义将不复存在 (2)最小时间单位为"分钟",想完成"秒"级任务,得需要借助额外其它机制 定义成每分钟任务:而在利用脚本实现在每分钟内,循环执行多次 示例: 3 * * * *:每小时的第3分钟执行任务 4 5 * * *:每天的5点4分执行任务 3 4 * * 5:每周5的4点3分执行任务 5 6 7 * *:每月的7号的6点5分执行任务 7 8 9 10 *:每年的10月9号8点7分执行任务 0 8,20 * * 3,7:每周3和周日的8点和20点执行任务 0 9-18 * * 1-5:周1到周5的9点至18点钟执行任务 */5 * * * *:每五分钟执行 crontab命令: crontab [-u user] [-l | -r | -e] [-i] [-s] -e:编辑计划任务 -l:查看计划任务 -r:清空计划任务 -i:交互式,当使用-r选项时,提示用户是否继续 -u USER:root用户可为指定用户配置cron任务 注意:运行结果以邮件通知给当前用户;如果拒绝接收邮件 (1)COMMAND > /dev/null (2)COMMAND &> /dev/null 注意:定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%号不用转义
控制用户执行cron
/etc/cron.deny:黑名单,此文件中所定义的用户均不可执行cron任务 /etc/cron.allow:白名单,只有在此文件中定义的用户才可执行cron任务 白名单优先级要高于黑名单,默认白名单不存在,如果存在,则只有白名单里定义的用户才可执行计划任务 如果两个文件都不存在,则只有root用户才肯执行cron任务
原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/46514