一、计划任务应用场景:
需要每天对服务器上的数据进行备份,但是白天服务器的访问量较大,服务器承受着较大的压力,备份任务只能在夜晚服务器较空闲时才能进行。或者需要临时在某时间点执行一个任务等,都需要用到计划任务的功能。
二、计划任务分类:
一次性计划任务:at
周期性计划任务:cron
三、一次性计划任务:
at [options]… Time
常用选项:
-l:查看作业队列,相当于atq
-d #:删除指定的作业,相当于atrm
-f /path/from/somefile:从指定文件中读取作业,而不再使用骄傲胡输入
-c #:查看指定作业的具体内容
-q queue:指明队列
Time可以使用以下格式表示:
HH:MM[YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now +#:
Unit:Minutes,Hours,Days,Weeks
at now +1min:表示1分钟之后执行任务
at 04pm +3day:表示3天后的下午4点
例:在10:57在系统广播“hello”
注:要执行的的任务输入完成之后,使用ctrl + d键确认完成此计划。
at任务的任务队列:
at任务存放在/var/spool/at目录中
默认为a队列,任务名以a开头。
at任务的执行方式:
at任务的执行依赖于atd服务,要使at任务能准时执行,需要保证atq服务开启,且最好设置为开机自启。
service atd start
chkocnfig atd on
作业的执行结果是以邮件的形式发送给提交作业的用户,在执行at任务应尽量将输出重定向,避免产生过多的垃圾邮件。
控制普通用户能否创建at任务
/etc/at.deny #黑名单
黑名单中的用户不允许创建at任务
/etc/at.allow #白名单,默认情况下,此文件未在系统中创建,需手动添加
只允许在白名单中的用户执行at任务
若不想让所有普通用户创建at任务
1、删掉at.deny文件
2、创建at.allow文件,文件内容为空
白名单优先级高于黑名单,白名单和黑名单拥有同一个用户,则以白名单为准
四、周期性计划任务
cron的服务程序为crond
主程序包为cronie,提供crond守护进程及相关的辅助工具。
crontab计划任务要能准时运行,需要确保crond守护进程(daemon)处于运行状态,且应设置为开机启动。
在CentOS6和7启动任务时略有不同。
CentOS7:
systemctl start crond
systemctl enable crond
CentOS6:
service crond start
chkconfig crond on
cron任务计划分类:
系统cron任务:主要用于实现系统自身的维护。
编辑/etc/crontab完成任务定义
用户cron任务:完成用户自定义的任务
使用crontab命令定义任务
etc/crontab文件的配置格式:
分 时 日 月 周 Username Command to be excuted"命令的绝对路径"
例:每天晚上9点10分运行echo命令
10 21 * * * centos /bin/echo "Howdy!"
注意:
(1)、每一行定义一个周期性任务。
(2)、此处的PATH环境变量不同于用户登陆后的环境变量
(3)、执行结果以邮件的形式发送给指定用户,为避免产生过多的垃圾邮件,命令产生的输出应进行重定向处理。
时间表示法:
(1)、特定值
给定时间点有效取值范围内的值
(2)、*
给定时间点上有效取值范围内的所有值。表示”每…“
(3)指定时间点上的离散取值
在给定时间点上使用逗号分隔的多个值即可。
(4)连续取值
在时间点上使用“-”连接开头和结束
(5)在指定时间点上,定义步长。
/#: #即步长
注意:
(1)指定的时间点不能被步长整除时,其意义将不复存在
(2)最小时间单位为分钟,想完成秒级任务,需借助于其他机制。可定义成每分钟任务:再利用脚本实现每分钟之内,循环执行多次。
(3)* * 1,10,20 * 0,6
这样的事件格式标识每月1号、10号、20号,以及每周六、每周日执行任务
例:
(1) 3 * * * *:每小时第三分钟
(2) 3 4 * * 5:每周5的4点的第3分钟
(3) 5 6 7 * *:每月7日6点5分。
(4) 7 8 9 10 *:每年第10月9号8点7分
(5) 9 8,20 * * 3,7:每周三和周日的8点9分和20点9分
(6) 1 9-18 * * 1-5;周一到周五的9点到18点每小时执行。
(7) */5 * * * *:每5分钟执行一次
crontab命令:
crontab [options]
-u user
-l (list)
-e (edit)
-r:移除所有任务
crontab编辑时不指定用户,为编辑当前登录用户的计划任务;root可以编辑指定用户的计划任务。
crontab -u gentoo -e #编辑指定用户的计划任务
crontab -u gentoo -l #查看指定用户的计划任务
例:每周六凌晨0点5分备份/etc目录下的所有配置文件至/back目录下,命名为"etcbak-年月日-时.tar.xz“
5 0 * * 6 root /bin/tar -Jcf /etc/*.conf /backup/etcbak-`date +\%F-\%H`.tar.xz
注意:在crontab中,%具有特殊意义,若要在命令中使用%,需要转义
管理普通用户的计划任务权限
/etc/cron.deny #黑名单中的用户不能配置计划任务。
/etc/cron.allow #只有白名单中的用户可以配置计划任务。若白名单中未指定用户,则所有普通用户都不可配置计划任务。
白名单优先级高于黑名单
五、实战演练
1、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”
10 0 * * 0,2,4 root /bin/cp /log/message /logs/messages-`date %F`
2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
0 2 * * * root /bin/cat /proc/meminfo | /bin/grep '^[S|M].*' >> /tmp/meminfo.txt
注:在使用命令时,应通过which获取命令的绝对路径,再使用绝对路径。
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/44893
评论列表(1条)
文章思路清晰,层次分明,有理论也有实践,很值得学习的一篇博客。