『运维备忘录』之 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)

FieldRangeSpecial characters
Minute0 - 59, - * /
Hour0 - 23, - * /
Day of Month1月31日, - * ? / L W
Month1月12日, - * /
Day of Week0 - 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 * * 5At 9:10AM of every Friday
0 0 * * 0At midnight of every Sunday
15 2 * * 1LAt 2:15am on the last monday of every month
15 0 * * 4#2At 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)
@rebootEvery reboot
@yearlyRun once every year, "0 0 1 1 *"
@annually(same as @yearly)
@monthlyRun once every month, "0 0 1 * *"
@weeklyRun once every week, "0 0 * * 0"
@dailyRun once each day, "0 0 * * *"
@midnight(same as @daily)
@hourlyRun once an hour, "0 * * * *"

七、小窍门

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

echo "@reboot echo hi" | crontab

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

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

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

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

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

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

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

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪字节π

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值