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