写点什么

资深 Linux 系统管理员常用的 15 个很好用的 Cron 工作示例

发布于: 1 小时前

​​​​​​摘要:LinuxCron 实用程序是一种在特定时间和/或日期持续调度例行后台作业的有效方法。这篇文章讲述了 15 个很好用的 crontab 工作调度示例。


本文分享自华为云社区《Linux Crontab:15 个很好用的 Cron 工作示例》,作者:Tiamo_T。

 

经验丰富的 Linux 系统管理员知道在后台自动运行日常维护作业的重要性。

Linux Cron 实用程序是一种在特定时间和/或日期持续调度例行后台作业的有效方法。

这篇文章讲述了 15 个很好用的 crontab 工作调度示例。

Linux Crontab 格式


MIN HOUR DOM MON DOW CMD
复制代码



1. 为特定时间安排作业


cron 的基本用法是在特定的时间执行一个作业,如下所示。这将在 6 月 10 日上午 08:30 执行完整备份 shell 脚本(完整备份)。请注意,时间字段使用 24 小时格式。因此,对于上午 8 点使用 8,对于晚上 8 点使用 20。


30 08 10 06 * /home/ramesh/full-backup
复制代码


  • 30 – 30 分钟

  • 08 – 08 上午

  • 10 – 第 10 天

  • 06 – 第 6 个月(六月)

  • * – 一周中的每一天

2. 为多个实例安排作业(例如,一天两次)


以下脚本每天进行两次增量备份。本示例在每天的 11:00 和 16:00 执行指定的增量备份 shell 脚本(incremental-backup)。字段中的逗号分隔值指定该命令需要在所有提到的时间内执行。


00 11,16 * * * /home/ramesh/bin/incremental-backup
复制代码


  • 00 – 第 0 分钟(一小时的顶部)

  • 上午 11,16 – 11 点和下午 4 点

  • * – 每天

  • * – 每个月

  • * – 一周中的每一天

3. 安排特定时间范围的工作(例如仅在工作日)


如果您希望在特定时间范围内每小时安排一次作业,请使用以下内容。

每天工作时间的 Cron Job

本示例在每天上午 9 点至下午 6 点的工作时间内(包括周末)检查数据库的状态


00 09-18 * * * /home/ramesh/bin/check-db-status
复制代码


  • 00 – 第 0 分钟(一小时的顶部)

  • 09-18 – 9 am, 10 am,11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm

  • * – 每天

  • * – 每个月

  • * – 一周中的每一天


Cron Job 每个工作日的工作时间

本示例在每个工作日(即不包括周六和周日)的工作时间上午 9 点至下午 6 点检查数据库的状态


00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
复制代码


  • 00 – 第 0 分钟(一小时的顶部)

  • 09-18 – 9 am, 10 am,11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm

  • * – 每天

  • * – 每个月

  • 1-5 -周一、周二、周三、周四和周五(每个工作日)

4. 如何查看 Crontab 条目?


查看当前登录用户的 Crontab 条目

要查看您的 crontab 条目,请从您的 unix 帐户键入 crontab -l,如下所示。


ramesh@dev-db$ crontab -l@yearly /home/ramesh/annual-maintenance*/10 * * * * /home/ramesh/check-disk-space
[Note: This displays crontab of the current logged in user]
复制代码


查看根 Crontab 条目

以 root 用户 (su – root) 登录并执行 crontab -l ,如下所示。


root@dev-db# crontab -lno crontab for root
复制代码


Crontab HowTo:查看其他 Linux 用户的 Crontab 条目

要查看其他 Linux 用户的 crontab 条目,请登录到 root 并使用-u{username} -l,如下所示。


root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
复制代码


5. 如何编辑 Crontab 条目?


编辑当前登录用户的 Crontab 条目

要编辑 crontab 条目,请使用 crontab -e,如下所示。默认情况下,这将编辑当前登录的用户 crontab。


ramesh@dev-db$ crontab -e@yearly /home/ramesh/centos/bin/annual-maintenance*/10 * * * * /home/ramesh/debian/bin/check-disk-space~"/tmp/crontab.XXXXyjWkHw" 2L, 83C
[Note: This will open the crontab file in Vim editor for editing.Please note cron created a temporary /tmp/crontab.XX... ]
复制代码


当你用 :wq 保存上述临时文件时,它会保存 crontab 并显示以下消息,表明 crontab 修改成功。


~"crontab.XXXXyjWkHw" 2L, 83C writtencrontab: installing new crontab
复制代码


编辑根 Crontab 条目

以 root 用户 (su – root) 登录并执行 crontab -e,如下所示。


root@dev-db# crontab -e
复制代码


编辑其他 Linux 用户的 Crontab 文件条目

要编辑其他 Linux 用户的 crontab 条目,请登录到 root 并使用-u{username} -e,如下所示。


root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
复制代码


6. 使用 Cron 每分钟安排一个作业。


理想情况下,您可能不需要每分钟安排一次作业。但是理解这个例子将帮助你理解本文下面提到的其他例子。


* * * * * CMD
复制代码


* 表示所有可能的单位——即全年每小时的每一分钟。除了直接使用这个 *,您会发现它在以下情况下非常有用。


  • 当您在分钟字段中指定 */5 时,表示每 5 分钟一次。

  • 当您在分钟字段中指定 0-10/2 时,意味着在前 10 分钟内每 2 分钟一次。

  • 因此,上述约定可用于所有其他 4 个字段。

7. 每 10 分钟安排一个后台 Cron 作业。


如果您想每 10 分钟检查一次磁盘空间,请使用以下方法。


*/10 * * * * /home/ramesh/check-disk-space
复制代码


它全年每 10 分钟执行一次指定的命令 check-disk-space。但是您可能需要仅在办公时间执行命令,反之亦然。上面的例子展示了如何做这些事情。我们可以使用单个关键字来指定它,而不是在 5 个字段中指定值,如下所述。在某些特殊情况下,您可以使用 @ 后跟关键字来代替上述 5 个字段,例如重新启动、午夜、每年、每小时。



8. 使用 @yearly 在每年的第一分钟安排工作


如果您希望在每年的第一分钟执行一项工作,那么您可以使用 @yearly cron 关键字,如下所示。这将在每年 1 月 1 日的 00:00 使用年度维护 shell 脚本执行系统年度维护。


@yearly /home/ramesh/red-hat/bin/annual-maintenance
复制代码


9. 使用 @monthly 安排每个月开始的 Cron 作业


它与上面的 @yearly 相似。但是使用 @monthly cron 关键字每月执行一次命令。这将在每月 1 日的 00:00 执行 shell 脚本磁带备份。


@monthly /home/ramesh/suse/bin/tape-backup
复制代码


10. 每天使用 @daily 安排后台作业


使用 @daily cron 关键字,这将在每天 00:00 使用 cleanup-logs shell 脚本执行每日日志文件清理。


@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
复制代码


11. 如何在每次重启后使用 @reboot 执行 Linux 命令?


使用 @reboot cron 关键字,这将在机器每次启动后执行一次指定的命令。


@reboot CMD
复制代码


12. 如何使用 MAIL 关键字禁用/重定向 Crontab 邮件输出?


默认情况下,crontab 将作业输出发送给安排作业的用户。如果要将输出重定向到特定用户,请在 crontab 中添加或更新 MAIL 变量,如下所示。


ramesh@dev-db$ crontab -lMAIL="ramesh"
@yearly /home/ramesh/annual-maintenance*/10 * * * * /home/ramesh/check-disk-space
[Note: Crontab of the current logged in user with MAIL variable]
复制代码


如果您不希望将邮件发送到任何地方,即停止通过电子邮件发送 crontab 输出,请在 crontab 中添加或更新 MAIL 变量,如下所示。


MAIL=""
复制代码


13. 如何使用 Crontab 每秒执行一次 Linux Cron 作业。


您不能安排每秒一次的 cronjob。因为在 cron 中,您可以指定的最小单位是分钟。在典型的场景中,我们大多数人没有理由每秒在系统中运行任何作业。

14.在 Crontab 中指定 PATH 变量


以上所有例子我们都指定了需要执行的 Linux 命令或 shell-script 的绝对路径。例如,如果您只想指定 tape-backup,而不是指定/home/ramesh/tape-backup,则将路径/home/ramesh 添加到 crontab 中的 PATH 变量中,如下所示。


ramesh@dev-db$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh
@yearly annual-maintenance*/10 * * * * check-disk-space
[Note: Crontab of the current logged in user with PATH variable]
复制代码


15. 从 Cron 文件安装 Crontab


除了直接编辑 crontab 文件之外,您还可以先将所有条目添加到 cron 文件中。在文件中包含所有这些条目后,您可以将它们上传或安装到 cron,如下所示。


ramesh@dev-db$ crontab -lno crontab for ramesh
$ cat cron-file.txt@yearly /home/ramesh/annual-maintenance*/10 * * * * /home/ramesh/check-disk-space
ramesh@dev-db$ crontab cron-file.txt
ramesh@dev-db$ crontab -l@yearly /home/ramesh/annual-maintenance*/10 * * * * /home/ramesh/check-disk-space
复制代码


注意:这会将 cron-file.txt 安装到您的 crontab,这也将删除您的旧 cron 条目。因此,从 cron-file.txt 上传 cron 条目时请注意。


点击关注,第一时间了解华为云新鲜技术~

发布于: 1 小时前阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
资深Linux系统管理员常用的15个很好用的Cron工作示例