首页 Linux学习

希望我的文章能帮助到你。
欢迎访问我的个人博客: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
domday of month,表示日期1-31
monmonth,表示月份1-12
dowday 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 重定向来解决。

参考:

  1. Ubuntu 使用 Cron 实现计划任务
  2. Ubuntu Cron定时程序
  3. 解决(CRON) info (No MTA installed, discarding output)

写在最后:
如果你从这里学会了如何利用 crontab 配置计划任务,请为我的文章点个赞!谢谢!
当然,如果文章中有错误,希望你能告诉我,谢谢!



文章评论

    zzjcjd 访客ChromeWindows
    2021-05-11 21:03 回复

目录