希望我的文章能帮助到你。
欢迎访问我的个人博客:codeupbetter.com,学习各种有趣的知识。
文章首更于个人博客,个人博客的排版效果更好:Ubuntu 使用 Cron 实现计划任务。
引言:或许你正在学习如何使用 cron 来实现计划任务,又或许你在配置 cron 计划任务的过程中遇到了一些问题,那么本篇文章很有可能会帮助到你。在这篇文章中,我将从以下几个方面展开阐述。
(1)cron 是什么,对 cron 进行简单的介绍;
(2)如何使用 cron,对 cron 的配置流程进行介绍;
(3)列出简单的例子,帮助你快速上手。
声明:本文所提到的方法和示例仅在 Ubuntu 18.04 上进行过测试和使用,并未在其他系统上进行测试,请谨慎。
1. cron 是什么
在 Windows 平台下,我们可以利用任务计划程序
很方便的安排计划任务,同样在 Ubuntu 系统中也有一款类似的程序,那就是 cron。借助 cron 的帮助,我们可以在 Ubuntu 系统中很方便的设置各种计划任务,例如定时重启、运行计划的备份、监视磁盘空间、定期删除不再需要的文件(例如日志文件)、运行系统维护任务、配合 supervisorctl 实现定时重启后台进程等等。
2. cron 的配置流程
2.1 安装 cron 服务
- 通常 Ubuntu 下自带 cron,如果没有也可以通过以下命令进行安装:
sudo apt-get install cron
。 - 若已经安装,输入以下命令判断 cron 服务是否启动:
pgrep cron
。 - 如果有 pid (一串数字)输出则说明 cron 服务已经启动,没有任何输出说明需要手动启动 cron 服务。
2.2 启动 cron 服务
- 启动服务
sudo service cron start
。
2.3 编辑计划文件
crontab -e
# 如果待执行的任务需要 root 权限,请使用下面的命令:
sudo crontab -e # 此命令相当于"sudo crontab -u root -e"
来打开你的用户所属的 crontab 文件。第一次用这个命令,会让你选择文本编辑器,选择你常用的编辑器即可。
2.4 重启 cron 服务
每次保存了 crontab 之后,我们还需要重启 cron 来应用这个计划任务。使用命令:sudo service cron restart
。
2.5 管理任务计划文件
cron 的所有任务计划都记录在 crontab 任务计划文件中,通过 crontab 命令对该任务文件进行管理。
crontab 的用法如下:
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
下面列举了常用的命令。
$ crontab -u root -e #编辑用户 root 的计划任务文件(需要有 root 权限)
$ crontab -e #编辑当前用户的计划任务文件
$ crontab -u root -l #显示用户 root 的计划任务文件(需要有 root 权限)
$ crontab -l #显示当前用户的计划任务文件
$ crontab -r #删除当前用户的计划任务文件
2.6 cron 语法格式
# m h dom mon dow command
0-59 0-23 1-31 1-12 0-7 command
符号 | 含义 | 取值范围 |
---|---|---|
m | 表示分钟 | 0-59 |
h | 表示小时 | 0-23 |
dom | day of month,表示日期 | 1-31 |
mon | month,表示月份 | 1-12 |
dow | day of week,表示星期 | 0-7 |
command | 待执行的命令 | - |
需要特殊说明的是,dow 的取值范围为 0-7
共 8 个数,1-6
分别表示周一-周六,0 和 7 均表示周日
(如果想深究原因,请参考这里)。
另外需要使用一些特殊符号实现灵活的配置:
*
代表所有值/
代表“每”-
代表范围,
分割数字
3. 案例讲解
3.1 一些简单的计划任务
## 指定具体执行时间
2 * * * * ls #每个小时的第 2 分钟执行一次 ls 命令
30 7 * * * ls #每天 7:30 执行一次 ls 命令
30 20 * * 2 ls #每周二,20:30执行一次 ls 命令(0 和 7 表示星期天)
## 指定间隔时间
*/2 * * * * ls #每隔 2 分钟执行一次 ls 命令
## 指定时间段
30 7 3-6 * * ls #每个月的 3,4,5,6 号的 7:30 分各执行一次 ls 命令
## 指定多个时间
30 7 3,6 * * ls #每月的 3 号和 6 号的 7:30 分各执行一次 ls 命令
3.2 利用 crontab 定时执行 python 程序。
首先,编写 crontab_test.py 脚本,其内容如下:
#/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime
print(datetime.datetime.now())
接下来,在终端中运行 crontab -e
,如果是首次运行该命令,请选择常用的编辑器。然后,在最后一行输入计划任务。
# m h dom mon dow command
# 计划任务说明:每分钟执行一次 crontab_test.py 脚本,并将程序的输出写入到 crontab_test.log 中。
*/1 * * * * python3 ~/crontab_test.py >> ~/crontab_test.log 2>&1
在此需要说明的是,你需要指定 crontab_test.py 的路径,我这里为了方便,将 crontab_test.py 放到了用户
目录中。
还有一点也很重要,为方便获取计划任务运行失败的原因和脚本或程序的执行结果,我们需要使用重定向功能,将这些输出重定向到文本文件中,例如上面的实例中,可以利用 >> ~/crontab_test.log 2>&1
将输出的信息都保存到 crontab_test.log 文件中。
接下来,利用 service cron restart
重启 cron 服务。
crontab_test.log 中的记录如下,每分钟都会增加一条时间记录:
2021-02-13 22:26:01.966367
2021-02-13 22:27:01.068101
2021-02-13 22:28:01.104400
2021-02-13 22:29:01.138184
2021-02-13 22:30:01.170291
2021-02-13 22:31:01.200550
2021-02-13 22:32:01.234358
2021-02-13 22:33:01.267891
2021-02-13 22:34:01.296008
2021-02-13 22:35:01.330538
2021-02-13 22:36:01.364392
2021-02-13 22:37:01.400419
从上面的结果来看,我们设定的计划任务达到了预期的效果。如果你参考着本教程一步步来的,并且已经得到了类似上面内容的输出结果,那么恭喜你,你现在已经初步掌握利用 crontab 设置计划任务了。
如果你在尝试的过程中遇到了 (CRON) info (No MTA installed, discarding output) 问题,可以利用 >> /path/xxx.log 2>&1
重定向来解决。
参考:
写在最后:
如果你从这里学会了如何利用 crontab 配置计划任务,请为我的文章点个赞!谢谢!
当然,如果文章中有错误,希望你能告诉我,谢谢!