PUB:20160605 How to Add Cron Jobs in Linux and Unix

@mr-ping @FSSlc
This commit is contained in:
wxy 2016-06-28 15:56:56 +08:00
parent 5222e10edf
commit f9c2c5705c

View File

@ -19,9 +19,9 @@
- **UNIX 或 Linux 系统的 crontab** : 此类型通常由那些需要 root 或类似权限的系统服务和重要任务使用。第六个字段(见下方的字段介绍)为用户名,用来指定此命令以哪个用户身份来执行。如此一来,系统的 `crontab` 就能够以任意用户的身份来执行操作。 - **UNIX 或 Linux 系统的 crontab** : 此类型通常由那些需要 root 或类似权限的系统服务和重要任务使用。第六个字段(见下方的字段介绍)为用户名,用来指定此命令以哪个用户身份来执行。如此一来,系统的 `crontab` 就能够以任意用户的身份来执行操作。
- **用户的 crontab**: 用户可以使用 `corntab` 命令来安装属于他们自己的定时任务。 第六个字段为需要运行的命令, 所有的命令都会以创建该 crontab 任务的用户的身份运行。 - **用户的 crontab**: 用户可以使用 `crontab` 命令来安装属于他们自己的定时任务。 第六个字段为需要运行的命令, 所有的命令都会以创建该 crontab 任务的用户的身份运行。
**注意**: 这种问答形式的 `Cron` 实现由 Paul Vixie 所写,并且被包含在许多 [Linux][2] 发行版本和类 Unix 系统(如广受欢迎的第四版 BSD中。它的语法被各种 crond 的实现所[兼容][3]。 **注意**: 这种问答形式的 `Cron` 实现由 Paul Vixie 所写,并且被包含在许多 [Linux][2] 发行版本和类 Unix 系统(如广受欢迎的第四版 BSD中。它的语法被各种 crond 的实现所[兼容][3]。
那么我该如何安装、创建或者编辑我自己的定时任务呢? 那么我该如何安装、创建或者编辑我自己的定时任务呢?
@ -47,24 +47,24 @@ $ crontab -e
其中: 其中:
- 1: 分钟 (0-59) - 第1个字段分钟 (0-59)
- 2: 小时 (0-23) - 第2个字段小时 (0-23)
- 3: 日期 (0-31) - 第3个字段日期 (0-31)
- 4: 月份 (0-12 [12 代表 December]) - 第4个字段月份 (0-12 [12 代表 December])
- 5: 一周当中的某天 (0-7 [7 或 0 代表星期天]) - 第5个字段一周当中的某天 (0-7 [7 或 0 代表星期天])
- /path/to/command 计划执行的脚本或命令的名称 - /path/to/command - 计划执行的脚本或命令的名称
便于记忆的格式: 便于记忆的格式:
``` ```
* * * * * 要执行的命令 * * * * * 要执行的命令
----------------
| | | | | | | | | |
| | | | —– 一周当中的某天 (0 7) (周日为 0 或 7) | | | | ---- 周当中的某天 (0 - 7) (周日为 0 或 7)
| | | ——- 月份 (1 12) | | | ------ 月份 (1 - 12)
| | ——— 一月当中的某天 (1 31) | | -------- 一月当中的某天 (1 - 31)
| ———– 小时 (0 23) | ---------- 小时 (0 - 23)
————- 分钟 (0 59) ------------ 分钟 (0 - 59)
``` ```
简单的 `crontab` 示例: 简单的 `crontab` 示例:
@ -90,13 +90,13 @@ $ crontab -e
- **逗号 (,)** : 这个操作符指定了一个包含多个值的列表,例如:`1,5,10,15,20,25`. - **逗号 (,)** : 这个操作符指定了一个包含多个值的列表,例如:`1,5,10,15,20,25`.
- **横杠 ()** : 此操作符指定了一个值的范围,例如:`5-15` ,等同于使用逗号操作符键入的 `5,6,7,8,9,.,13,14,15`。 - **横杠 (-)** : 此操作符指定了一个值的范围,例如:`5-15` ,等同于使用逗号操作符键入的 `5,6,7,8,9,...,13,14,15`。
- **分隔符 (/)** : 此操作符指定了一个步进值,例如: `0-23/` 可以用于小时字段来指定某个命令每小时被执行一次。步进值也可以跟在星号操作符后边,如果你希望命令行每 2 小时执行一次,则可以使用 `*/2` - **分隔符 (/)** : 此操作符指定了一个步进值,例如: `0-23/` 可以用于小时字段来指定某个命令每小时被执行一次。步进值也可以跟在星号操作符后边,如果你希望命令行每 2 小时执行一次,则可以使用 `*/2`
### 如何禁用邮件输出 ### 如何禁用邮件输出
默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止收到 `crontab` 发送的邮件,需要添加 `>/dev/null 2>&1` 这段内容,例如: 默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止收到 `crontab` 发送的邮件,需要添加 `>/dev/null 2>&1` 这段内容到执行的命令的后面,例如:
``` ```
0 3 * * * /root/backup.sh >/dev/null 2>&1 0 3 * * * /root/backup.sh >/dev/null 2>&1
@ -133,9 +133,9 @@ crontab -r
crontab -r -u username crontab -r -u username
``` ```
### 使用特殊字符来节省时间 ### 使用特殊字符来节省时间
你可以使用以下 8 个特殊字符中的其中一个替代头五个字段,这样不但可以节省你的时间,还可以提高可读性。 你可以使用以下 8 个特殊字符中的其中一个替代头五个字段,这样不但可以节省你的时间,还可以提高可读性。
特殊字符 |含义 特殊字符 |含义
|:-- |:-- |:-- |:--
@ -158,9 +158,9 @@ crontab -r -u username
### 关于 `/etc/crontab` 文件和 `/etc/cron.d/*` 目录的更多内容 ### 关于 `/etc/crontab` 文件和 `/etc/cron.d/*` 目录的更多内容
** /etc/crontab ** 是系统的 corntabs 文件。通常只被 root 用户或守护进程用于配置系统级别的任务。每个独立的用户必须像上面介绍的那样使用 `corntab` 命令来安装和编辑自己的任务。`/var/spool/cron/` 或者 `/var/cron/tabs/` 目录存放了个人用户的 corntab 文件,它必定会备份在用户的家目录当中。 ** /etc/crontab ** 是系统的 crontab 文件。通常只被 root 用户或守护进程用于配置系统级别的任务。每个独立的用户必须像上面介绍的那样使用 `crontab` 命令来安装和编辑自己的任务。`/var/spool/cron/` 或者 `/var/cron/tabs/` 目录存放了个人用户的 crontab 文件,它必定会备份在用户的家目录当中。
### 理解默认的 `/etc/crontab` 文件 ###理解默认的 `/etc/crontab` 文件
典型的 `/etc/crontab` 文件内容是这样的: 典型的 `/etc/crontab` 文件内容是这样的:
@ -176,9 +176,9 @@ HOME=/
42 4 1 * * root run-parts /etc/cron.monthly 42 4 1 * * root run-parts /etc/cron.monthly
``` ```
首先,环境变量必须被定义。如果 shell 行被忽略corn 会使用默认的 sh shell。如果 PATH 变量被忽略,就没有默认路径会被使用,所有的文件都需要使用绝对路径来定位。如果 HOME 变量被忽略corn 会使用调用者(用户)的家目录。 首先,环境变量必须被定义。如果 SHELL 行被忽略cron 会使用默认的 sh shell。如果 PATH 变量被忽略,就没有默认的搜索路径,所有的文件都需要使用绝对路径来定位。如果 HOME 变量被忽略cron 会使用调用者(用户)的家目录替代
另外corn 会读取 `/etc/cron.d/`目录中的文件。通常情况下,像 sa-update 或者 sysstat 这样的系统守护进程会将他们的定时任务存放在此处。作为 root 用户或者超级用户,你可以使用以下目录来配置你的定时任务。你可以直接将脚本放到这里。`run-parts`命令会通过 `/etc/crontab` 文件来运行位于某个目录中的脚本或者程序。 另外cron 会读取 `/etc/cron.d/`目录中的文件。通常情况下,像 sa-update 或者 sysstat 这样的系统守护进程会将他们的定时任务存放在此处。作为 root 用户或者超级用户,你可以使用以下目录来配置你的定时任务。你可以直接将脚本放到这里。`run-parts`命令会通过 `/etc/crontab` 文件来运行位于某个目录中的脚本或者程序。
目录 |描述 目录 |描述
|:-- |:-- |:-- |:--
@ -198,7 +198,7 @@ HOME=/
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
via: https://www.unixmen.com/add-cron-jobs-linux-unix/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+unixmenhowtos+%28Unixmen+Howtos+%26+Tutorials%29 via: https://www.unixmen.com/add-cron-jobs-linux-unix/
作者:[Duy NguyenViet][a] 作者:[Duy NguyenViet][a]
译者:[mr-ping](https://github.com/mr-ping) 译者:[mr-ping](https://github.com/mr-ping)