Cron 是在类 Unix 操作系统上执行预定命令的守护进程,包括 Ubuntu Linux 20.04 LTS。 要执行的命令存储在称为 Crontab 的表中。 由 Cron 守护程序执行的任务称为 Cronjob。 Cronjob 是自动执行的,这使得 cron 可用于自动化与维护相关的任务。
前提条件:
- 有一个帐户并已登录到 Ubuntu Linux 20.04 LTS 控制台
- 已配置 SSH 密钥
- 具有 sudo 权限或对 root 用户的访问权限。
安装 Cron
Cron 是 Ubuntu 操作系统的一部分,预装在大多数 Ubuntu 发行版上。 但是,如果需要,你可以使用 apt 包管理器手动安装 Cron。
- 确保你的 apt 包索引已更新:
apt update
- 使用 apt 包管理器安装 Cron:
apt install cron
- 确保该服务已启用并在后台运行,以便能够调度任务:
systemctl enable cron
以下输出显示:
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.Executing: /lib/systemd/systemd-sysv-install enable cron
了解 Cron
Cronjobs 通过一个 cronfile 管理,这个 cronfile 特定于系统的每个用户。这允许每个用户调度他们自己的 cronjob。 这些 cronfile 位于 <font style="color:#FF4D4F;">/var/spool/cron/crontabs/</font> 目录中。 Cron 允许你执行几乎所有的命令行命令。
每个 crontab 使用以下结构:
| 分钟 (0 - 59) | 小时 (0 - 23, 0 = 午夜) | 每月的哪一天 (1 - 31) | 月份 (1 - 12) | 星期几(0 - 6, 0 = 星期日) | 命令或目录路径和脚本名称 |
|---|---|---|---|---|---|
| * | * | * | * | * | e.g. /var/www/websites/backup.sh |
提示:你还可以使用下面的符号:
月份:JAN-DEC
星期几:SUN-SAT
以下是每晚 4:30 运行备份的示例:
30 04 * * * /var/www/websites/backup.sh
特殊字符串
Cron 提供了一系列特殊字符串,可以用来代替五个时间和日期字段:
| String | Meaning |
|---|---|
| * | 表示“全部”的通配符变量 * 在每月的每天的每小时的每分钟运行 |
| , | 将调度值分解成一个列表 0,30 在每个小时的开始和中间运行 |
| - | 调度字段中的值范围 0-29 每小时前 30 分钟的每分钟运行一次 |
| */ | 表示步长值 /10 * 每 10 分钟运行一次(10、20、30 等) |
| @reboot | 在启动时运行一次 |
| @yearly | 每年运行一次 0 0 1 1 * |
| @annually | (与 @yearly 相同) |
| @monthly | 每月运行一次 0 0 1 |
| @weekly | 每周运行一次 0 0 0 |
| @daily | 每天运行一次 0 0 * |
| @midnight | (与 @daily 相同) |
| @hourly | 每小时运行一次 0 |
管理 crontab
一旦决定运行 cronjob 的时间,就需要在 crontab 文件中提供这些信息,以便 Cron 守护程序可以读取这些信息。
重要提示:
<font style="color:#FF4D4F;">crontab</font>文件是常规文本文件,但不建议直接编辑它。 请改用<font style="color:#FF4D4F;">crontab</font>命令,该命令还将检查你的编辑是否存在语法错误。
- 打开
<font style="color:#FF4D4F;">crontab</font>文件:
crontab -e
如果你是第一次运行该命令,并且没有 crontab,则会创建一个新的。 将显示以下提示:
Select an editor. To change later, run 'select-editor'.1. /bin/nano <---- easiest2. /usr/bin/vim.basic3. /usr/bin/vim.tiny4. /bin/edChoose 1-4 [1]:
输入你想选择的编辑器对应的数字,或者按 <font style="color:#E8323C;">Enter</font> 键使用默认选项 <font style="color:#E8323C;">nano</font> - 这是对用户最友好的选项。
- 通过在文件末尾添加任务来编辑 crontab。
注意:默认情况下,该文件包含一些关于如何编辑 crontab 文件的注释信息。 跳到文件末尾以添加你的任务。
# Edit this file to introduce tasks to be run by cron.## Each task to run has to be defined through a single line# indicating with different fields when the task will be run# and what command to run for the task## To define the time you can provide concrete values for# minute (m), hour (h), day of month (dom), month (mon),# and day of week (dow) or use '*' in these fields (for 'any').## Notice that tasks will be started based on the cron's system# daemon's notion of time and timezones.## Output of the crontab jobs (including errors) is sent through# email to the user the crontab file belongs to (unless redirected).## For example, you can run a backup of all your user accounts# at 5 a.m every week with:# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/## For more information see the manual pages of crontab(5) and cron(8)## m h dom mon dow command
完成后,按 <font style="color:#FF4D4F;">CTRL + O</font> 保存修改,然后按 <font style="color:#E8323C;">CTRL + X</font> 退出文本编辑器。
提示:
<font style="color:#E8323C;">crontab</font>会记住你选择的编辑器。 以后运行 crontab -e 时,它会在同一个文本编辑器中自动打开文件。
查看 cronjob
如果要显示 crontab 的内容,但不对其进行编辑,请使用以下命令:
crontab -l
删除 cronjob
如果要删除 crontab,请运行以下命令:
crontab -r -i
出现提示时,按 <font style="color:#E8323C;">y</font> 确认删除,或按 <font style="color:#E8323C;">n</font> 取消。
翻译
