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 <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 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>
取消。
翻译