强大且可靠,使用 Linux cron 命令安排任务
在我 Linux 之旅的早期,我开始欣赏操作系统的众多命令行实用程序以及它们简化常规任务的方式。例如,在我的 Windows 服务器上备份应用程序经常需要昂贵的附加软件包。相比之下,该tar命令使备份 Linux 相对容易,而且功能强大且可靠。
然而,在备份电子邮件系统时,我面临着另一个挑战。由于人们正在使用该系统,因此无法在工作日或傍晚进行备份。备份必须在午夜之后进行,并且必须可靠。我习惯了 Windows 任务管理器,但在 Linux 上我要用什么呢?那时我才学会了 cron。
使用 cron 在 Linux 上安排任务
Cron 是一个用于自动执行预定命令的守护进程。学习如何使用 cron 需要一些学习理解和实验,但很快我就使用 cron 来关闭我们的电子邮件服务器,将数据备份到压缩的 tar 文件中,然后在凌晨 3 点重新启动电子邮件服务。
cron 作业的命令存储在 Linux 系统上的 crontab 文件中,该文件通常位于 /etc/crontab 中。使用 $ crontab -l 显示 crontab 文件的内容。
使用$ crontab -e 编辑 crontab 文件。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
crontab -e
如果您以后改变主意,该如何选择另一个编辑器?要使用的命令是select-editor。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
select-editor
某些系统默认使用Vi 编辑器进行 cron 编辑。您可以使用环境变量覆盖此设置:
$ EDITOR=nano crontab -e
这允许您使用nano 编辑器来编辑您的个人 crontab(如果你还没有,则会自动为您创建一个)。
在插入整数值之前,所有 crontab 命令都有用星号表示的参数。第一个表示分钟,然后是小时、月中的某天、一年中的某月,最后是一周中的某天。
注释前面有一个哈希。Cron 会忽略注释,因此它们是一种很好的方式,可以让您自己记下命令的作用及其重要性。
一个 cron 作业示例
假设您想在每周三凌晨 1 点使用 clamscan 扫描您的主目录中的病毒和恶意软件。您还想在每周五上午 5 点备份您的主目录。使用 cron 和 crontab 文件可确保每周进行系统维护,无论您是否记得运行这些实用程序。
使用您自己的用户名而不是我的用户名“linuxmi”编辑您的 crontab 文件以包含以下内容:
# 扫描我的主目录是否有病毒
0 1 * * 3 clamscan -ir /home/linuxmi/
# 备份主目录
0 5 * * 5 tar -zcf /var/backups/home.tgz /home/linuxmi/
如果您使用的是 nano 编辑器,请使用Ctrl+O将文件写出并使用Ctrl+X退出编辑器来保存您的工作。
提示如下,说明成功保存了。
crontab: installing new crontab
编辑文件后,使用crontab -l列出您的 cron 文件的内容,以确保它已正确保存。
您可以为系统所需的任何作业创建 crontab 作业。这充分利用了 cron 守护进程。
使用crontab -r删除目前的时程表
从 Linux 命令行调度
cron 最难的部分是为那些领先的星号提供正确的值,但这已经不是什么秘密了。
时间格式如下:
t1 t2 t3 t4 t5 program
- 其中 t1 是表示分钟,t2 表示小时,t3 表示一个月份中的第几日,t4 表示月份,t5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 t1 为 * 时表示每分钟都要执行 program,t2 为 * 时表示每小时都要执行程序,其余类推
- 当 t1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,t2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
- 当 t1 为 */n 时表示每 n 分钟个时间间隔执行一次,t2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
- 当 t1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,t2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。
此外,大多数现代 cron 系统都具有常用值的快捷方式,包括:
- @hourly : 每小时运行一次 (0 * * * *)
- @daily: 每天运行一次 (0 0 * * *)
- @weekly: 每周运行一次 (0 0 * * 0)
- @monthly: 每月运行一次 (0 0 1 * *)
- @reboot: 重启后运行一次
还有 cron 的替代方案,包括anacron用于您希望定期运行但不根据特定计划运行的作业,以及用于一次性作业的at 命令。
Cron 是一个有用的任务调度系统,使用起来就像编辑文本一样简单。试试看吧!