Linux任务计划、周期性任务执行 将来的某时间点执行某任务:at,batch 周期性运行某任务:crontab 执行结果,会经过邮件发送给用户 若是一下2条命令能够看到25端口,则代表邮件服务可用 ~]# netstat -tnlp ~]# ss -tnl 本地电子邮件按服务: smtp:simple mail transmission protocol 发邮件 pop3:Post Office Procotol 收邮件 imap4:Internet Mail Access Procotol 收邮件 mail命令: mailx - send and receive Internet mail MUA:Mail User Agent,用户收发邮件的工具程序:如outlook,foxmail mailx [-s 'SUBJECT'] username[@username] 邮件正文的生成: (1)交互式输入:.单独成行能够表示正文结束;Ctrl+d提交也能够 (2)经过输入重定向: (3)经过管道: at命令: at [OPTION]...time TIME: HH:MM noon,midnignt,teatime(下午4点) tomorrow now+# UNIT:minutes,hours,days,OR weeks at的做业有队列,用单个字母表示,默认都使用a队列 经常使用选项: -l:查看做业队列,至关于atq -f /PATH/FROM/SOMEFILE:从指定文件中读取做业任务,不用交互式输入 -d 做业号:删除做业,至关于atrm -c:查看指定做业的具体内容 -q QUEUE:指名队列 注意:做业执行结果是以邮件发送给提交做业的用户 batch命令: batch会让系统自行选择在系统资源较空闲的时间去执行制定的任务 周期性任务计划:cron 服务程序: cronie:主程序包,提供了crond守护进程及相关辅助工具 确保crond守护进程(daemon)处于运行状态 CentOS 7: systemctl status crond.service Active:active(running).... CentOS 6: service crond status ... is running 向cron提交做业的方式不一样于at,它须要使用专用的配置文件,此文件有固定格式,不建议使用文本编辑器直接编辑此文件,要使用crontab命令 cron任务分为两类: 系统cron任务:主要用于实现系统自身的维护 手动编辑:/etc/crontab 用户cron任务: 命令:crontab 系统cron的配置格式:/etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" # 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)每一行定义一个周期性任务,共7个字段 * * * * * :定义周期性时间 user-name:运行任务的用户身份 command to be executed:任务 (2)此处的环境变量不一样于用户登陆后获取的环境,所以,建议命令使用绝对路径,或者自定义PATH环境变量 (3)执行结果邮件发送给MAILTO指定的用户 用户cron任务的配置格式:/var/spool/cron/USERNAME SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="" # 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 # | | | | | # * * * * * command to be executed 注意: (1)每一行定义一个周期性任务,共6个字段 * * * * * :定义周期性时间 command to be executed:任务 (2)此处的环境变量不一样于用户登陆后获取的环境,所以,建议命令使用绝对路径,或者自定义PATH环境变量 (3)执行结果邮件发送当前用户 时间表示法: (1)特定值: 给定时间点有效取值范围内的值: 注意:day of week和day of month通常不一样时使用 (2)* 给定时间点上有效取值范围内的全部值:表示“每...” (3)离散取值 在时间点上使用逗号分隔的多个值 #,#,# (4)连续取值 在时间点上使用-链接开头的结束 #-# (5)在指定时间点上,定义步长 /#:#即步长 注意: (1)指定的时间不能被步长整除是,其意义将不复存在 (2)最小时间单位为“分钟”,想完成“秒”,须要额外借助于其它机制:定义成每分钟任务:而在利用脚本实如今每分钟以内,循环执行屡次 示例: (1)3 * * * *:每小时执行;每小时的第3分钟 (2)3 4 * * 5:每周执行一次,每周5的4点3分 (3)3 6 7 * *:每个月执行一次,每个月的7号的6点5分 (4)7 8 9 10 *:每一年执行一次,每一年的10月9号8点7分 (5)9 8 * * 3,7:每周三和周日的8点9分 (6)0 8,20 * * 3,7:每周三和周日的8点和20点 (7)0 9-18 * * 1-5:工做时间内的每小时 (8)*/5 * * * *:每5分钟执行一次某任务 crontab命令: crontab [-u user] [-l | -r | -e] [-i] -e:编辑任务 -l:列出全部任务 -r:移除全部任务;即删除/var/spool/cron/USERNAME文件 -i:在使用-r选项移除全部任务时提示用户确认 -u:root为其它用户指定cron任务 注意:运行结果以邮件通知给当前用户,若是拒绝接收邮件 (1)COMMAND >/dev/null (2)COMMAND &>/dev/null 注意:定义COMMAND时,若是命令须要用到%,须要对其转义;但放置于单引号中的%不用转义亦可 思考: 某任务在指定的时间因关机未能执行,下次开机会不会自动执行? 不会! 练习: (1)每12小时备份一次/etc目录至/backups目录中,保存文件格式为“etc/yyyy-mm-dd-hh.tar.xz" 0 */12 * * * tar -Jcf /backups/etc-$(date +%Y-%m-%d-%H).tar.xz /home/sysfft/ (2)每周二、4、7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd" 0 0 * * 2,4,7 cp /var/log/secure /logs/secure-$(date +%Y%m%d) (3)每两个小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加到/tmp/meminfo.txt文件中 0 */2 * * * grep ^[S,M] /proc/meminfo >> /tmp/meminfo.txt