使用Cron在Ubuntu上创建定时任务
cron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。 Cron在后台运行,并且使用cron计划的任务(称为“ cron作业”)会自动执行,这对于自动执行与维护相关的任务非常有用。
在本教程中使用的是Ubuntu 18.04版本,并且还需要一个具有管理权限的账号。
安装Cron
默认情况下,几乎每个Linux发行版都默认会安装Cron。 如果您使用的是未安装cron的Ubuntu计算机,则可以安装它。
在Ubuntu机器上安装cron之前,请更新计算机的本地软件包索引 :
sudo apt update
然后使用以下命令安装cron:
sudo apt install cron
您还需要确保它也设置为在后台运行 :
sudo systemctl enable cron
Output 输出
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable cron
到此,cron就安装在你的系统上,并可以开始调度作业。
理解Cron是如何工作的
Cron的各个任务在一个crontab的特殊文件中记录和管理。 系统上的每个用户都可以拥有自己的crontab配置文件,可以在里面添加计划任务,这些任务存储在/ var / spool / cron / crontabs /下。
要添加任务,可以打开crontab进行编辑,并添加以cron表达式形式编写的任务计划。 cron表达式的语法可以分为两个元素:时间和要运行的命令。 运行的命令实际上可以是在命令行上运行的任何命令。 语法的时间表组件分为5个不同的字段,按以下顺序编写:
image.png
将时间参数组合在一起后,在crontab中编写的的任务计划结构如下 :
minute hour day_of_month month day_of_week command_to_run
您还可以在cron表达式的时间计划中包括一些特殊字符,可以以使计划更加容易 :
image.png
以下是一些更多有关如何使用cron计划组件的示例:
* * * * * - Run the command every minute.
12 * * * * - Run the command 12 minutes after every hour.
0,15,30,45 * * * * - Run the command every 15 minutes.
*/15 * * * * - Run the command every 15 minutes.
0 4 * * * - Run the command every day at 4:00 AM.
0 4 * * 2-4 - Run the command every Tuesday, Wednesday, and Thursday at 4:00 AM.
20,40 */8 * 7-12 * - Run the command on the 20th and 40th minute of every 8th hour every day of the last 6 months of the year.
直接编写时间表可能会有点麻烦。Cronitor提供了一个方便的cron时间表表达式编辑器,名为“ Crontab Guru”,您可以使用它来检查您的cron时间表是否有效。 Crontab.guru - The cron schedule expression editor
管理Crontab
安排好执行计划后,需要将计划放在守护程序可以读取的位置。 crontab是一个特殊文件,其中包含cron将运行的作业计划。 但是这个文件不建议直接进行编辑。 可以使用crontab命令来进行添加。 crontab命令还可以检查是否存在语法错误。
您可以使用以下命令编辑crontab:
crontab -e
如果这是用户第一次运行crontab命令,它将提示选择在编辑crontab时要使用的默认文本编辑器:
Output 输出
no crontab for sammy - using an empty one
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]:
输入与习惯使用的编辑器相对应的数字。 或者可以按ENTER接受默认选项nano。
选择完成后,将进入一个新的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
可以直接在后面增加新的一行,添加如下的计划任务(该任务每分钟执行一次,输出信息,并写到 /home/test.log日志文件中,可以检查日志查看任务是否执行)
* * * * * echo ‘Run this command every minute’ >> /home/test.log
在新行中添加了每个作业的时间表后。 保存并关闭crontab(如果使用nano,CTRL + X,Y,ENTER)。
保存后可以查看crontab的内容,检查是否添加成功,使用以下命令:
crontab -l
参考文章
How To Use Cron to Automate Tasks on Ubuntu 18.04 | DigitalOcean