Linux任务计划,周期性任务执行

任务计划分类:
1.未来的某一时间点执行一次任务:at,batch
2.周期性运行某任务:crontab
其执行的结果以mail发送给用户
ps:可通过netstat -tnlp或ss -tnl观察25接口查询mail是否启动
Linux任务计划,周期性任务执行

一.mail命令

1.用法:mail [-s ‘邮件标题’] username[@主机名(同一主机无需指明)]
2.mail正文实现方式
1)交互式输入,可以通过.或ctrl+D结束正文输入:
Linux任务计划,周期性任务执行
Linux任务计划,周期性任务执行
2)通过输入重定向,mail -s “test” kasumi < /etc/issue
Linux任务计划,周期性任务执行
3)通过管道,echo “hi testing” | mail -s “test1” kasumi
Linux任务计划,周期性任务执行

二.未来某时间点执行一次命令

1.at命令

1.用法:at [OPTION]… TIME,time的形式:
1)HH:MM [YYYY-mm-dd]
2)tomorrow,noon,midnight
3) now+#
4)单位:minutes,hours,days,weeks

2.常用选项

  1. -l(atq):查看作业的队列
    Linux任务计划,周期性任务执行
  2. -f:从指定文件读取任务
    Linux任务计划,周期性任务执行
    3)-c:查看指定作业内容

4)-q:指定队列(at的默认队列为a队列)
Linux任务计划,周期性任务执行
5)-d(atrm):删除指定作业
Linux任务计划,周期性任务执行

2.batch命令

1.batch命令:batch会让系统自行选择在系统资源较空闲时去执行指定任务

三.周期性任务计划cron

1.cron服务程序

1.服务程序:cronie,主程序抱,提供了crond守护进程及相关辅助工具

2.要确保crond守护进程(daemon)处于运行状态
1)centos7:systemctl status crond.service,查询是否运行。若未运行,需要启动此服务:systemctl restart crond.service来启动服务
2)centos6及以下:service crond status查询。若未启动,需要开启此服务:service crond start

2.cron任务分类

1.系统cron任务:主要用于实现系统自身维护
ps:可在 /etc/crontab编辑(因此文件有其固定格式,最好不要直接编辑,可使用crontab命名)

2.用户cron任务:可使用crontab命令

3.系统及用户cron配置格式

1.系统cron配置格式:/etc/crontab
Linux任务计划,周期性任务执行
1)其中每一行定义一个周期性任务,共七个字段
* * * * * :定义周期性时间,分别为,分钟,小时,日,月,周
user-name:运行任务的用户身份
command to be executed:所要执行的任务

2)在定义cron时,所用到的命令需要使用绝对路径;若是脚本,脚本中命令使用绝对路径,或者自定义一个拥有完整路径的环境变量。

3)执行结果通过mail发送给mail指定的用户

2.用户cron的配置格式:/var/spool/cron/username
Linux任务计划,周期性任务执行
3.cron配置格式中的自定义时间表示方法:
1)特定值:给定时间点有效取值范围内的值,其中每周字段与每月字段不一起使用
2)*:表示每“分钟,小时,日,月,周“
3)离散取值:在各时间字段上使用逗号分隔,#,#,#
4)连续取值:在各时间字段上使用-链接开头和结束,#-#
5)定义步长:/#表示步长
ps:

  1. 若指定的时间字段不能被步长整除时,其意义可能会改变
    2)其最小时间单位为“分钟“,若要完成“秒“则需要借助其他工具;定义成每分钟任务,再利用脚本实现在每分钟循环多次。

4.举列:
1) 5 * * * *:每小时的第5分钟执行一次
2) 5 8 * * 4:每周四的8点五分执行一次
3)5 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:每周一至周五的9至18点每小时执行一次
8)*/5 * * * *:每5分钟执行一次
9) */7 * * * *:每7分钟执行一次(其执行至56分钟时,循环会变为4分钟,无法以7分钟循环)

4.crontab命令

1.用法crontab [-u user] [-l |[-r] | -e] [-i]
1)-e:编辑crontab任务(期为vim模式编辑)
Linux任务计划,周期性任务执行
ps:这里使用%需要进行转义
2)-l:列出当前所有任务
Linux任务计划,周期性任务执行
3)-u user:root用可为指定用户管理cron任务
Linux任务计划,周期性任务执行
4)-i:在使用-r选项删除任务时提示用户确认
5)-r:删除所有任务,即/var/spool/cron/*文件删除

2.若运行结果不想接收mail可使用
(1)command > /dev/null 仅出现错误信息报告至mail
(2) command &> /dev/null或command > /dev/null 2>&1,不论是否出现错误信息都不显示

3.若某任务在指定时间因关机未能执行,则下次开机也不会自动执行;若需要将未执行的任务在下次开机执行,则需要anacron实现

2.crontab没有执行的原因
1)若使用crontab -e命令时,添加任务无需添加执行用户,默认为当前用户。。若添加用户会导致出现:/bin/sh: root: command not found,会将root执行用户当做命令出错。
2)若在/etc/crontab中配置系统任务,则需要添加执行用户
3) 若在crontab -e命令中添加脚本,则脚本中的命令也需要使用绝对路径。或脚本中有引用其他脚本,其他脚本也需要使用绝对路径,或者提前切换到其他脚本的执行目录下,否则执行crontab命令时,会默认在crontab配置文件目录下执行其他脚本。

5.crontab练习

1.每12小时备份一次/etc目录至/backups目录中,保存文件 名称格式为“etc-yyyy-mm-dd-hh.tar.xz”(若crontab用户命令需要用到%则需要转义,或使用$(date +’%F-%H’)
1)mkdir /backups
2)0 */12 * * * root /usr/bin/tar -Jcf /backups/etc-$(date +\%F-\%H).tar.xz /etc
ps:使用tar归档压缩时,当后面的备份目录使用绝对路径时,会出现tar: 从成员名中删除开头的“/”,这是因为tar命令默认是采用相对路径来进行压缩打包的,使用-P选项可消除报错,并且解压缩时也需要-P选项。

2.每周2、4、7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”
1)mkdir /logs
.2)0 0 * * 2,4,7 root /usr/bin/cp /var/log/secure /logs/secure-$(date +\%F)

3.每两小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中
1)0 /2 * * * root /usr/bin/grep -E "^(S|M)." /proc/meminfo >> /tmp/meminfo.txt
2)执行后结果
Linux任务计划,周期性任务执行