『运维备忘录』之 Cron 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。

今天我们要讲的是 Crontab


一、简介

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

Min  Hour Day  Mon  Weekday
*    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬
│    │     │    │    └───────────   Day of Week   (0=Sun .. 6=Sat)
│    │     │    └─────────────    Month         (1..12)
│    │     └────────────────   Day of Month  (1..31)
│    └──────────────────     Hour          (0..23)
└─────────────────────   Minute        (0..59)

Field Range Special characters
Minute 0 - 59 , - * /
Hour 0 - 23 , - * /
Day of Month 1月31日 , - * ? / L W
Month 1月12日 , - * /
Day of Week 0 - 6 , - * ? / L #

二、操作命令

 cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

# 操作系统为Linux 7版本及以上:
systemctl start   crond    #启动服务
systemctl stop    crond    #关闭服务
systemctl restart crond    #重启服务
systemctl reload  crond    #重新载入配置
systemctl status  crond    #查看crontab服务状态
systemctl enable  crond    #开启开机自动启动
systemctl disable crond    #禁止开机自动启动

# 操作系统为Linux 7版本以下:
/sbin/service crond start    #启动服务
/sbin/service crond stop     #关闭服务
/sbin/service crond restart  #重启服务
/sbin/service crond reload   #重新载入配置
ntsysv                       #查看crontab服务是否已设置为开机启动
chkconfig –level 35 crond on #开机自动启动

三、用户任务调度文件

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

四、使用者权限文件

  • 文件:/etc/cron.deny,说明:该文件中所列用户不允许使用crontab命令
  • 文件:/etc/cron.allow,说明:该文件中所列用户允许使用crontab命令
  • 文件夹:/var/spool/cron/,说明:所有用户crontab文件存放的目录,以用户名命名
  1. /etc/cron.deny和/etc/cron.allow这两个使用控制文件的格式都是每行一个用户, 两个文件都不允许空格。
  2. 如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
  3. 使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
  4. 无论使用控制文件中的规定如何,root 都总是可以使用 cron。
  5. 如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
  6. 如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

五、命令参数

  • -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提示。 

六、使用实例

表达式 说明
*/15 * * * * Every 15 mins
0 * * * * Every hour
0 */2 * * * Every 2 hours
15 2 * * * At 2:15AM of every day
15 2 * * ? At 2:15AM of every day
10 9 * * 5 At 9:10AM of every Friday
0 0 * * 0 At midnight of every Sunday
15 2 * * 1L At 2:15am on the last monday of every month
15 0 * * 4#2 At 00:15am on the second thursday of every month
0 0 1 * * Every 1st of month (monthly)
0 0 1 1 * Every 1st of january (yearly)
@reboot Every reboot
@yearly Run once every year, "0 0 1 1 *"
@annually (same as @yearly)
@monthly Run once every month, "0 0 1 * *"
@weekly Run once every week, "0 0 * * 0"
@daily Run once each day, "0 0 * * *"
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *"

七、小窍门

1. 快速添加crontab,适用于通过脚本批量操作:

echo "@reboot echo hi" | crontab

2. crontab执行shell时,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行。

3. 定时任务添加注释,以便于其他人查看是什么任务。

4. 避免不必要的程序以及命令输出。

5. 推荐一个可以帮我们解读表达式的定时语句解析工具:https://crontab.guru/

『运维备忘录』之 Cron 命令详解_第1张图片

6. 如果命令在控制台执行成功,而在crontab执行失败,我们需要考虑是否命令涉及的环境变量在crontab和控制台间存在差异。

7. /var/log/cron 日志中包含任务执行记录,配置错误提示,任务配置编辑重载记录,服务开启等记录。

8. 新创建的crontab任务,不会马上执行,至少要过2分钟才行。如果重启crontab则马上执行。

你可能感兴趣的:(运维备忘录,运维)