经验丰富的系统运维工程师可以使得
Linux
在无需人为介入的情况下,在指定的时间段自动启用或停止某些服务或命令,从而实现运维的自动化。尽管我们现在已经有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要在每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了。接下来向大家讲解如何设置服务器的计划任务服务,把周期性、规律性的工作交给系统自动完成。
计划任务分为一次性计划任务与长期性计划任务,可以参照如下方式理解:
- 一次性计划任务:今晚 11 点 30 分开启网站服务。
- 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为backup.tar.gz。
一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用
at 命令实现这种功能,只需要写成“at
时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l
”命令;要想将其删除,可以用“
atrm
任务序号”。在使用 at
命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚 23:30
分自动重启网站服务。
[root@localhost ~]# at 14:15
at> systemctl restart httpd
at> <EOT>
job 2 at Thu Aug 19 14:15:00 2021
[root@localhost ~]# at -l
2 Thu Aug 19 14:15:00 2021 a root
可以把前面学习的管道符(任意门)放到两条命令之间,让 at
命令接收前面
echo
命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的。
[root@localhost ~]# echo "systemctl restart httpd" | at 22:30
job 3 at Thu Aug 19 22:30:00 2021
[root@localhost ~]# at -l
2 Thu Aug 19 14:15:00 2021 a root
3 Thu Aug 19 22:30:00 2021 a root
如果我们不小心设置了两个一次性计划任务,可以使用下面的命令轻松删除其中一个:
[root@localhost ~]# atrm 3
[root@localhost ~]# at -l
2 Thu Aug 19 14:15:00 2021 a root
如果、希望
Linux
系统能够周期性地、有规律地执行某些具体的任务,那么
Linux
系统中默认启用的 crond
服务简直再适合不过了。创建、编辑计划任务的命令为“
crontab -e”,查看
当前计划任务的命令为“crontab -l”,
删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在 crontab 命令中加上-u 参数来编辑他人的计划任务。
假设在每周一、三、五的下午14点45分,都需要使用 tar 命令把home/zhangxu目录进行打包处理,使其作为一个备份文件。我们可以使用 crontab -e 命令来创建计划任务。为自己创建计划任务无需使用-u 参数,具体的实现效果的参数如 crontab -l 命令结果所示:
[root@localhost ~]# crontab -l
45 14 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/zhangxu
除了用逗号(
,
)来分别表示多个时间段,例如“
8,9,12
”表示
8
月、
9
月和12
月。还可以用减号(
-
)来表示一段连续的时间周期(例如字段“日”的取值为“
12-15
”,则表示每月的 12
~
15
日)。以及用除号(
/
)表示执行任务的间隔时间(例如“
/2
”表示每隔2分钟执行一次任务)之外。
如果在
crond
服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨 1
点钟自动清空
/tmp
目录内的所有文件。尤其需要注意的是,在 crond
服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用 whereis
命令进行查询,
rm
命令路径为下面输出信息中加粗部分。
[root@localhost ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@localhost ~]# crontab -l
45 14 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/zhangxu
0 15 * * 1-5 /usr/bin/rm -rf /tmp/*
工作中使用计划服务的注意事项:
- 在 crond 服务的配置参数中,可以像 Shell 脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。
- 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期” 字段不能同时使用,否则就会发生冲突。