一次性计划任务顾名思义就只是一次性有效,一般用于临时的工作需要,咱们可以用at命令实现这种功能,只需要写成"at 时间"的形式就可以,如果想要查看已设置好但还未执行的计划任务可以用"at -l"命令,而删除的话可以用"atrm 任务序号"即可,默认用at命令来设置计划任务的话是通过交互式的方法,例如设置系统在今晚23:30分自动重启网站服务吧:[root@linuxprobe ~]# at 23:30at > systemctl restart httpdat > 此处请同时按下Ctrl+d来结束编写计划任务job 3 at Mon Apr 27 23:30:00 2015[root@linuxprobe ~]# at -l3 Mon Apr 27 23:30:00 2016 a root当然如果您想挑战一下更加高难度但又简便的方式,可以把前面章节中学习的管道符(任意门)放到两条命令之间,让at命令接收前面echo命令的输出信息,以达到通过非交互式的方式创建计划任务,这样的话在Shell脚本中都可以做引用了~[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30job 4 at Mon Apr 27 23:30:00 2015[root@linuxprobe ~]# at -l3 Mon Apr 27 23:30:00 2016 a root4 Mon Apr 27 23:30:00 2016 a root如果一不不小心设置了两条,想要删除其中一条的话也是很简单的:[root@linuxprobe ~]# atrm 3[root@linuxprobe ~]# at -l4 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 -eno crontab for root - using an empty onecrontab: installing new crontab[root@linuxprobe ~]# crontab -l25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot而如果计算机服务器中需要有多条计划任务,并且这次的工作是每周一至五的每天的凌晨1点钟清空/tmp临时目录中的所有文件,就可以把相应的参数依次写到下面。而在crond服务的计划任务参数中所有的命令请一定要用绝对路径的方式来写,如果不知道的话用whereis命令来查下吧:[root@linuxprobe ~]# whereis rmrm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz[root@linuxprobe ~]# crontab -ecrontab: installing new crontab[root@linuxprobe ~]# crontab -l25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot0 1* * 1-5 /usr/bin/rm -rf /tmp/*