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。

  1. 确保你的 apt 包索引已更新:
  1. apt update
  1. 使用 apt 包管理器安装 Cron:
  1. apt install cron
  1. 确保该服务已启用并在后台运行,以便能够调度任务:
  1. systemctl enable cron

以下输出显示:

  1. Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
  2. 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 运行备份的示例:

  1. 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> 命令,该命令还将检查你的编辑是否存在语法错误。

  1. 打开 <font style="color:#FF4D4F;">crontab</font> 文件:
  1. crontab -e

如果你是第一次运行该命令,并且没有 crontab,则会创建一个新的。 将显示以下提示:

  1. Select an editor. To change later, run 'select-editor'.
  2. 1. /bin/nano <---- easiest
  3. 2. /usr/bin/vim.basic
  4. 3. /usr/bin/vim.tiny
  5. 4. /bin/ed
  6. Choose 1-4 [1]:

输入你想选择的编辑器对应的数字,或者按 <font style="color:#E8323C;">Enter</font> 键使用默认选项 <font style="color:#E8323C;">nano</font> - 这是对用户最友好的选项。

  1. 通过在文件末尾添加任务来编辑 crontab。

注意:默认情况下,该文件包含一些关于如何编辑 crontab 文件的注释信息。 跳到文件末尾以添加你的任务。

  1. # Edit this file to introduce tasks to be run by cron.
  2. #
  3. # Each task to run has to be defined through a single line
  4. # indicating with different fields when the task will be run
  5. # and what command to run for the task
  6. #
  7. # To define the time you can provide concrete values for
  8. # minute (m), hour (h), day of month (dom), month (mon),
  9. # and day of week (dow) or use '*' in these fields (for 'any').
  10. #
  11. # Notice that tasks will be started based on the cron's system
  12. # daemon's notion of time and timezones.
  13. #
  14. # Output of the crontab jobs (including errors) is sent through
  15. # email to the user the crontab file belongs to (unless redirected).
  16. #
  17. # For example, you can run a backup of all your user accounts
  18. # at 5 a.m every week with:
  19. # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
  20. #
  21. # For more information see the manual pages of crontab(5) and cron(8)
  22. #
  23. # 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 的内容,但不对其进行编辑,请使用以下命令:

  1. crontab -l

删除 cronjob

如果要删除 crontab,请运行以下命令:

  1. crontab -r -i

出现提示时,按 <font style="color:#E8323C;">y</font> 确认删除,或按 <font style="color:#E8323C;">n</font> 取消。

翻译

Automating tasks on Ubuntu 20.04 using Cronjobs