资深Linux 系统管理员常用的15个很好用的Cron工作示例
摘要:Linux Cron 实用程序是一种在特定时间和/或日期持续调度例行后台作业的有效方法。这篇文章讲述了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 -l
no 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 written
crontab: 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 -l
MAIL="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 -l
no 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 条目时请注意。
资深Linux 系统管理员常用的15个很好用的Cron工作示例的更多相关文章
- Linux/Unix 常用的 15 类别名(alias)
背景 最近在整理 Linux 运维基线,整理记录下常用的 alias 设置. alias alias 命令用于设置指令的别名.用于简化较长的命令. 语法 alias [别名]=[指令名称] 示例:al ...
- Linux中Grep常用的15个例子【转】
转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件 ...
- 系统管理员常用的Linux命令
整理Linux的一些基本系统管理命令作为备忘 ========================================================================= 查看文 ...
- Linux最常用的基础命令
Linux最常用的基础命令个人总结 计算机基础知识: 32bit和64bit系统的区别.系统运行机制 32bit=内存的最大寻址空间是2**32,也就是说最大只能使用4GB的内存64bit=内存的最大 ...
- 观文章《Linux系统管理员修炼三层次》有感
层次,都不陌生,通俗讲,就是和档次挂钩的,初入江湖时,都想自己几年后,武艺精深,深藏百技,忙时带领团队打BOSS,闲时喝酒论道,博古纵今,想想都令人精神满满,干劲十足!!! 至今已入江湖几载,回首来 ...
- Linux系统管理常用命令
Linux系统管理常用命令 分类: Linux2011-01-10 18:26 1538人阅读 评论(0) 收藏 举报 linuxcommandservicenginxuserunix 目录(?)[+ ...
- linux中常用的60个命令及作用详解
Linux 必学的 60 个命令 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在 Linux 系统上工作离不开使用系统 ...
- Linux文件常用操作命令
Linux文件常用操作命令 一.Linux文件和目录简单操作 1.1 查看文件 ls 查看当前目录下的文件 如: -a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"." ...
- Linux强化论:15步打造一个安全的Linux服务器
Linux强化论:15步打造一个安全的Linux服务器 Alpha_h4ck2016-11-30共28761人围观 ,发现 8 个不明物体专题系统安全 可能大多数人都觉得Linux是安全的吧?但我要告 ...
- 一个LINUX狂人的语录(个人认为很精辟)
http://blog.chinaunix.net/uid-57160-id-2734431.html?page=2 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的 ...
随机推荐
- 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻译为PCL语言的步骤
前面这些都是问题描述,问题在偏下面 场景:用户电脑上安装了PCL驱动,可通过驱动完成打印. 需求:现在需要提供一种脱离PC端完成文件上传并打印的功能.让用户使用手机或pc未安装驱动时都能打印文件. 目 ...
- vscode 切换分支时报错:The following untracked working tree files would be overwritten .....
执行命令:git clean -d -fx 表示删除 一些 没有 git add 的 文件: git clean 参数 -n 显示将要删除的文件和目录: -x -----删除忽略文件已经对git来 ...
- HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机
双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配.如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配.比如 ushers ...
- Vue源码学习(十五):diff算法(二)交叉比对(双指针)
好家伙, 本节来解决我们上一章留下来的问题, 新旧节点同时有儿子的情况本章继续解决 1.要做什么? 本章将解决, 1.在相同tag下子元素的替换问题 2.使用双指针进行元素替换, 实现效果如下: ...
- git 忽略已提交(commit)的文件/文件夹
git 忽略已提交的文件或文件夹 最好是在工程一开始就编辑好 .gitignore 文件, 在第一次提交的时候仔细检查避免添加那些无用的文件 因为 .gitignore 只能对未提交过的文件起效, 也 ...
- 解决ADS1.2与MDK4.7冲突问题
需要添加2个系统变量. 1,在我的电脑点击属性--->高级--->环境变量---->系统变量,增加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib ...
- ST 表
ST 表 定义 ST 表是用于解决 可重复贡献问题 的数据结构,通俗来说,一般可以解决区间查询问题. 区间最值和 \(gcd\) 我们以最大值为例,然后可以再推广到最小值和区间 \(gcd\) 首先你 ...
- Android RTL 语言适配
RTL 语言,即 right to left language,也就是右对齐的语言,与一般语言按照左对齐的方式不同,需要进行特别适配. AndroidManifest.xml 文件中,增加 andro ...
- 错误记录-MariaDB连接异常
简介: 问题: C#,VS2022,mariadb-10.11.5-winx64,using MySql.Data.MySqlClient; 在执行connection.Open()时抛出异常:Sys ...
- python列表之索引及len()函数
我们在刚开始使用列表的时候,经常会遇到这种错误 list_1 = ['one', 'two', 'three', 'four', 'five'] print(list_1[5]) 这段代码看上去是没有 ...