计划任务服务程序
的有关信息介绍如下:厉害的系统运维工程师能够让Linux系统实现自动化工作,无需人工的干预就可以让各个服务、命令在指定的时间段执行、服务或停止。更何况咱们已经有了如此彪悍的脚本程序,如果只是需要每天凌晨两点敲一下回车去执行这个Shell脚本程序,这样的工作简直就是痛苦死了(或者训练您家的小猫半夜按下回车键)。刘遄老师接下来教给同学们如何来设置服务器的计划任务服务,把有周期规律性的工作交给系统去自动完成。计划任务有“一次性”与“长期性”的区分。详情请关注《linux就该这么学》。
一次性计划任务顾名思义就只是一次性有效,一般用于临时的工作需要,咱们可以用at命令实现这种功能,只需要写成"at 时间"的形式就可以,如果想要查看已设置好但还未执行的计划任务可以用"at -l"命令,而删除的话可以用"atrm 任务序号"即可,默认用at命令来设置计划任务的话是通过交互式的方法,例如设置系统在今晚23:30分自动重启网站服务吧:
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
当然如果您想挑战一下更加高难度但又简便的方式,可以把前面章节中学习的管道符(任意门)放到两条命令之间,让at命令接收前面echo命令的输出信息,以达到通过非交互式的方式创建计划任务,这样的话在Shell脚本中都可以做引用了~
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root
如果一不不小心设置了两条,想要删除其中一条的话也是很简单的:
[root@linuxprobe ~]# atrm 3
[root@linuxprobe ~]# at -l
4 Mon Apr 27 23:30:00 2016 a root
而如果您的工作需要是有周期规律性的,那Linux系统中默认启用的crond服务简直再适合不过了,创建、编辑计划任务的命令为"crontab -e",查看当前计划任务的命令为"crontab -l",删除某条计划任务的命令为"crontab -r",另外如果您登录的是超级用户的话,还可以通过加上-u参数来编辑其他人的计划任务。不过在正式的部署计划任务前,请先跟刘遄老师念一下口诀“分、时、日、月、星期 命令”,这是使用crond服务设置任务的参数格式,没有设置的位置也要用*号占位,如图所示:
参考上面crond计划任务实现的参数格式,假设目前每周一、三、五的凌晨3点25分都需要把某个网站数据目录通过tar命令打包成一个压缩包来当做备份文件,那么除了用减号(-)来表示一段连续的时间周期,例如12-15就可以代表每月的12-15日,除号(/)代表任务的间隔时间,例如/2就是每隔2分钟执行一次的意思,还可以用逗号(,)来分别表示多个时间段,如8,9,12来代表八月、九月和12月执行任务,那么来尝试做一下吧:
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
而如果计算机服务器中需要有多条计划任务,并且这次的工作是每周一至五的每天的凌晨1点钟清空/tmp临时目录中的所有文件,就可以把相应的参数依次写到下面。而在crond服务的计划任务参数中所有的命令请一定要用绝对路径的方式来写,如果不知道的话用whereis命令来查下吧:
[root@linuxprobe ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@linuxprobe ~]# crontab -e
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1* * 1-5 /usr/bin/rm -rf /tmp/*