网格

 找回密码
 立即注册

Linux Crontab 命令定时任务基本语法与操作教程

[复制链接]
69伙伴 发表于 2022-8-10 12:59:18 | 显示全部楼层 |阅读模式

一、Crontab 查看编辑重启
1、查看 crontab 定时执行任务列表

crontab -l
2、编辑 crontab 定时执行任务

crontab -e
3、删除 crontab 定时任务

crontab -r
4、相关命令:

sudo service crond start     #启动服务
sudo service crond stop      #关闭服务
sudo service crond restart   #重启服务
sudo service crond reload    #重新载入配置
sudo service crond status    #查看服务状态
二、Crontab 基本格式语法
crontab 的时间表达式:

基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
先来看一个例子。每天凌晨 1:00 执行备份程序:0 1 * * * /root/backup.sh 。其中/root/backup.sh 这是脚本路径,要使用绝对路径,前面的日期格式请直接看下图就知道了。
3370618556.gif


crontab 还有操作符,用来实现一些复杂的时间设定需要。操作符有:

1、* 取值范围内的所有数字 ,代表所有。

2、/ 每过多少个数字 ,代表每隔 n 长时间。

3、- 从 X 到 Z ,代表一段时间范围。

4、,散列数字,代表分割开多个值。

PS:2018 年 4 月 15 日更新,如果还有搞不懂代码公式的,可以使用这个在线 Cron 表达式生成器:http://cron.qqe2.com/

三、20 个经典 Crontab 应用实例
以脚本/root/backup.sh 为演示,大家在使用时记得替换为自己的脚本路径。



实例 1:每 1 分钟执行一次

* * * * *
/root/backup.sh
实例 2:每小时的第 3 和第 15 分钟执行一次

3,15 * * * *
/root/backup.sh
实例 3:每天的 8 点到 11 点的第 3 和第 15 分钟执行一次

3,15 8-11 * * *
/root/backup.sh
实例 4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行一次

3,15 8-11 */2  *  *
/root/backup.sh
实例 5:每周一上午 8 点到 11 点的第 3 和第 15 分钟执行一次

3,15 8-11 * * 1 /root/backup.sh
实例 6:每晚的 21:30 执行一次

30 21 * * *
/root/backup.sh
实例 7:每月 1、10、22 日的 4 : 45 执行一次

45 4 1,10,22 * *
/root/backup.sh
实例 8:每周六、周日的 1 : 10 执行一次

10 1 * * 6,0
/root/backup.sh
实例 9:每天 18 : 00 至 23 : 00 之间每隔 30 分钟执行一次

0,30 18-23 * * *
/root/backup.sh
实例 10:每星期六的晚上 23: 00 pm 执行一次

0 23 * * 6
/root/backup.sh
实例 11:每一小时执行一次

* */1 * * *
/root/backup.sh
实例 12:每天晚上 23 点到第二天 7 点之间,每隔一小时执行一次

* 23-7/1 * * * /root/backup.sh
实例 13: 每个星期的第一天执行一次(即每个星期天晚上 24:00 开始执行).

@weekly /root/backup.sh
实例 14:每个月的 15 日执行一次.

0 11 15 * * /root/backup.sh
实例 15:每个月的第一天执行一次(即每个月的 1 日凌晨 0 点开始执行).

@monthly /root/backup.sh
实例 16: 在指定的月份执行一次(在 1 月, 4 月和 6 月每天晚上 0 点执行一次).

0 0 * jan,apr,jun * /root/backup.sh
实例 17: 重启后执行一次.

@reboot /root/backup.sh
实例 18:定时任务执行后发一封邮件通知.

MAILTO="raj"
1 1 * * * /root/backup.sh
实例 19:指定 shell (默认的是 / bin/bash)

SHELL=/bin/sh
1 1 * * * /root/backup.sh
实例 20:指定环境变量.

PATH=/sbin:/bin:/usr/sbin:/usr/bin
1 1 * * * /root/backup.sh
四、Crontab 可能存在的问题
4.1  Crontab 不立即生效
大家新建的 Crontab 定时任务保存后需要等待 2 分钟后才会执行,当然如果想要立即执行可以重启 Crontab。当 crontab 失效时,可以尝试 / etc/init.d/crond restart 解决问题,或者查看日志看某个任务有没有执行 / 报错 tail -f /var/log/cron。

4.2  Crontab 不执行
脚本中涉及文件路径时写全局路径,更新系统时间时区后需要重启 cron。当手动执行脚本 OK,但是 crontab 死活不执行时很有可能是环境变量,可尝试在 crontab 中直接引入环境变量解决问题,例如:

0 * * * * . /etc/profile;/bin/sh
/root/backup.sh

4.3  Crontab 无权限执行
要注意系统级任务调度与用户级任务调度。只有 root 用户和 crontab 文件的所有者可以在 -e 、-l、-r 和 -v 标志后面使用 UserName 以编辑、列出、除去或验证指定用户的 crontab 文件。

root 用户的任务调度操作可以通过”crontab –uroot –e” 来设置,也可以将调度任务直接写入 / etc/crontab 文件。

想编辑别的用户的 crontab, 使用 root 运行下面的命令,同一个格式 (追加 “-u username” 到命令后) 也可以用来列出或删除 crontabs。

crontab -u username -e
4.4  Crontab 执行后通知
当 Crontab 定时任务在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,可以在日志中 /var/log/cron 看到。若是你不希望收到这样的通知,请在每一行空一格之后加上 > /dev/null 2>&1 即可。

回复

使用道具 举报

【附件·直接下】 不用注册

联系我们 ( 京ICP备16001788号 ) | 京公网安备 11010502049360号 | 2012- WGPro.CoM |

GMT+8, 2022-10-4 07:33

Powered by Discuz! X3.4

快速回复 返回顶部 返回列表