Linux/UNIX 定时任务 cron 详解

Duy NguyenViet 的头像

·

·

·

23,213 次阅读

导言

定时任务 cron job 被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/目录。它同样也会检查 /var/spool/cron/ 目录。

crontab 命令

crontab 是用来安装、卸载或者列出定时任务列表的命令。cron 配置文件则用于驱动 Vixie Croncron(8) 守护进程。每个用户都可以拥有自己的 crontab 文件,虽然这些文件都位于 /var/spool/cron/crontabs 目录中,但并不意味着你可以直接编辑它们。你需要通过 crontab 命令来编辑或者配置你自己的定时任务。

定时配置文件的类型

配置文件分为以下不同的类型:

  • UNIX 或 Linux 的系统级 crontab : 此类型通常由那些需要 root 或类似权限的系统服务和重要任务使用。第六个字段(见下方的字段介绍)为用户名,用来指定此命令以哪个用户身份来执行。如此一来,系统的 crontab 就能够以任意用户的身份来执行操作。
  • 用户的 crontab: 用户可以使用 crontab 命令来安装属于他们自己的定时任务。 第六个字段为需要运行的命令, 所有的命令都会以创建该 crontab 任务的用户的身份运行。

注意: 这种问答形式的 Cron 实现由 Paul Vixie 编写而成,并且被包含在许多 Linux 发行版本和类 Unix 系统(如广受欢迎的第四版 BSD)中。它的语法被各种 crond 的实现所兼容

那么我该如何安装、创建或者编辑我自己的定时任务呢?

要编辑你的 crontab 文件,需要在 Linux 或 Unix 的 shell 提示符后键入以下命令:

$ crontab -e

crontab 语法(字段介绍)

语法为:

1 2 3 4 5 /path/to/command arg1 arg2

或者

1 2 3 4 5 /root/ntp_sync.sh

其中:

  • 第1个字段:分钟 (0-59)
  • 第2个字段:小时 (0-23)
  • 第3个字段:日期 (1-31)
  • 第4个字段:月份 (1-12 [12 代表 December])
  • 第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
  • /path/to/command – 计划执行的脚本或命令的名称

便于记忆的格式:


* * * * * 要执行的命令
- 周当中的某天 (0 - 7) (周日为 0 或 7)
| | |  月份 (1 - 12)
| | -- 一月当中的某天 (1 - 31)
|  |  | 

via: <https://www.unixmen.com/add-cron-jobs-linux-unix/>

作者:[Duy NguyenViet](https://www.unixmen.com/author/duynv/) 译者:[mr-ping](https://github.com/mr-ping) 校对:[FSSlc](https://github.com/FSSlc)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

6 条回复

  1. 来自陕西西安的 Chrome 51.0|GNU/Linux 用户 的头像
    来自陕西西安的 Chrome 51.0|GNU/Linux 用户

    好贴一定要收藏一个

    来自西安
  2. 来自117.100.149.184的 Chrome 50.0|Windows 10 用户 的头像
    来自117.100.149.184的 Chrome 50.0|Windows 10 用户

    讲讲systemd里的timer?

    来自北京
  3. 来自四川成都的 Chrome 51.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 51.0|GNU/Linux 用户

    不得不說 Windows 7, 8,x, 10 的任務計劃功能更強,除了能夠執行定時任務,還可以在空閒時執行,系統開機或關機時執行,可以在用戶登錄或註銷時執行,可以在系統鎖定或解除時執行,可以在特定事件發生時執行,還可以設置若干啓動附件條件,以至於其完整設置需要用 XML 文件來定義。

    来自成都
  4. ryt [Chrome 51.0|GNU/Linux] 的头像
    ryt [Chrome 51.0|GNU/Linux]

    文章中有一处输入错误:
    第4个字段:月份 (0-12 [12 代表 December])
    应该修改为:
    第4个字段:月份 (1-12 [12 代表 December])

    来自秦皇岛
  5. linux [Chrome 50.0|Mac 10.11] 的头像
    linux [Chrome 50.0|Mac 10.11]

    所以,systemd 连 timer 也接管了。

    来自北京
  6. linux [Chrome 50.0|Mac 10.11] 的头像
    linux [Chrome 50.0|Mac 10.11]

    喏: https://linux.cn/article-3996-1.html
    想必因为你是没注册,所以没法搜索吧。

    来自北京

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注