你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何在Linux中使用at和crontab命令?

[复制链接]
gaosmile 发布时间:2020-6-30 12:59
经验丰富的系统运维工程师可以使得Linux在无需人为介入的情况下,在指定的时间段自动启用或停止某些服务或命令,从而实现运维的自动化。尽管我们现在已经有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要在每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了(当然,也可以训练您的小猫在半夜按下回车键)。接下来,将向大家讲解如何设置服务器的计划任务服务,把周期性、规律性的工作交给系统自动完成。计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。

8 }) Z3 Y  C: E4 D( w  q

一次性计划任务:今晚11点30分开启网站服务。

长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz。

顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚23:30分自动重启网站服务。


' ]! s; `( F; r" l1 O/ Y
[root@linuxprobe ~]# at 23:30* q5 R) z. f* p1 d
at > systemctl restart httpd
+ t+ l: q* ~4 x! x7 Bat > 此处请同时按下Ctrl+d来结束编写计划任务
+ B/ h  m( ~5 Q: n. I* i9 @7 [job 3 at Mon Apr 27 23:30:00 2015: y6 z; I( v! w+ S5 @
[root@linuxprobe ~]# at -l
6 W) A$ n6 O/ h  x9 p3 Mon Apr 27 23:30:00 2016 a root

& }4 Z9 R0 i! m" B2 K! `9 L

如果想挑战一下难度更大但简捷性更高的方式,可以把管道符(任意门)放到两条命令之间,让at命令接收前面echo命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的。


8 i# @* A" E0 j9 ^
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:300 k; Y: }3 R: O& `- _6 m
job 4 at Mon Apr 27 23:30:00 2015
" c0 w6 c/ t% F9 _* L$ i[root@linuxprobe ~]# at -l  E6 w  L5 n( R# H6 q4 L7 U
3 Mon Apr 27 23:30:00 2016 a root
& l, \2 m% z; {5 A4 Mon Apr 27 23:30:00 2016 a root
' {6 s/ x2 v; r' b, U7 _

如果我们不小心设置了两个一次性计划任务,可以使用下面的命令轻松删除其中一个:

  |, x6 f3 Q/ R! O
[root@linuxprobe ~]# atrm 3
: a, |8 k5 l; J' S5 W[root@linuxprobe ~]# at -l
" e) y& o* @, A9 M6 _  @1 T4 Mon Apr 27 23:30:00 2016 a root

/ d& L" [) q2 ~4 S& E( k
& ^/ `" h( y6 o) v+ Z; L

如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。

在正式部署计划任务前,请先念一下口诀“分、时、日、月、星期 命令”。这是使用crond服务设置任务的参数格式。需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位。

微信图片_20200630125808.png

) R* K" P7 p: I; Z
使用crond设置任务的参数格式使用crond设置任务的参数字段说明
$ w, z1 F% E+ a. h$ a% o- W
字段
说明
分钟
取值为0~59的整数
小时
取值为0~23的任意整数
日期
取值为1~31的任意整数
月份
取值为1~12的任意整数
星期
取值为0~7的任意整数,其中0与7均为星期日
命令
要执行的命令或程序脚本

假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用crontab -e命令来创建计划任务。为自己创建计划任务无需使用-u参数,具体的实现效果的参数如crontab -l命令结果所示:

: V1 H# C5 L$ s. O
[root@linuxprobe ~]# crontab -e% S, X% |' t- ^$ K* J) y& {
no crontab for root - using an empty one  r  R- c7 P7 U) N! ], p
crontab: installing new crontab) u$ W( e- c) k; R. q$ `: x
[root@linuxprobe ~]# crontab -l
" J9 O3 n) g/ O25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 y" O7 q$ H' x5 c9 `3 l, Z

需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。& _+ _! H* p% l: Z7 g

如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件。尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。

" y. C: B/ Q9 Q& I0 i9 D" k3 R
[root@linuxprobe ~]# whereis rm
1 c. K, d. x& N! A7 B, R: Mrm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
3 l3 S8 p0 @& d( W8 `/ x0 t; b[root@linuxprobe ~]# crontab -e3 B) t# a/ |  E. g' c
crontab: installing new crontab8 @5 O* P* z- j! z
[root@linuxprobe ~]# crontab -l
2 d  c$ ?$ k8 H; C6 v- [7 k3 z- {25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot' J2 G( c; z' ~+ \  E; L
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*6 Y' K' a2 ~  }  v4 h7 W6 F6 C

3 h$ ~$ ]5 P% t( e1 R" s3 [# C3 {4 t总结
  Q+ n  ]$ a! q  ^/ j; K

最后,再来啰嗦几句在工作中使用计划服务的注意事项。

在crond服务的配置参数中,可以像Shell脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。

本文档到此结束,希望对你的学习有帮助~


0 J% ?/ r8 z" s8 P
赞 收藏 评论1 发布时间:2020-6-30 12:59

举报

1个回答
小小超 回答时间:2020-6-30 16:16:55
鉴定完毕水贴~~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版