加入收藏 | 设为首页 | 会员中心 | 我要投稿 武陵站长网 (https://www.50888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Linux/UNIX 定时任务 cron 详解

发布时间:2022-10-17 03:34:32 所属栏目:Unix 来源:互联网
导读:
导言

定时任务cron job被用于安排那些需要被周期性执行的命令。利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。cron是 Linux 或者类 Unix 系统中最为实用的

unix awk 命令_unix命令图解_unix 命令大全

导言

unix 命令大全_unix awk 命令_unix命令图解

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

crontab 命令

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

定时配置文件的类型

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

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

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

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

  1. $ crontab -e

crontab语法(字段介绍)

语法为:

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

或者

  1. 1 2 3 4 5 /root/ntp_sync.sh

其中:

便于记忆的格式:

  1. * * * * * 要执行的命令

  2. ----------------

  3. | | | | |

  4. | | | | ---- 周当中的某天 (0 - 7) (周日为 0 7)

  5. | | | ------ 月份 (1 - 12)

  6. | | -------- 一月当中的某天 (1 - 31)

  7. | ---------- 小时 (0 - 23)

  8. ------------ 分钟 (0 - 59)

简单的crontab示例:

  1. ### 每隔 5 分钟运行一次 backupscript 脚本 ##

  2. */5 * * * * /root/backupscript.sh

  3. ### 每天的凌晨 1 点运行 backupscript 脚本 ##

  4. 0 1 * * * /root/backupscript.sh

  5. ### 每月的第一个凌晨 3:15 运行 backupscript 脚本 ##

  6. 15 3 1 * * /root/backupscript.sh

如何使用操作符

操作符允许你为一个字段指定多个值,这里有三个操作符可供使用:

如何禁用邮件输出

默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止接收crontab发送的邮件,需要添加>/dev/null 2>&1这段内容到执行的命令的后面,例如:

  1. 0 3 * * * /root/backup.sh >/dev/null 2>&1

如果想将输出内容发送到特定的邮件账户中,比如说 vivek@nixcraft.in 这个邮箱, 则你需要像下面这样定义一个 MAILTO 变量:

  1. MAILTO="vivek@nixcraft.in"

  2. 0 3 * * * /root/backup.sh >/dev/null 2>&1

访问 “禁用 Crontab 命令的邮件提示[4]” 查看更多信息。

任务:列出你所有的定时任务

键入以下命令:

  1. # crontab -l

  2. # crontab -u username -l

要删除所有的定时任务,可以使用如下命令:

  1. ### 删除当前定时任务

  2. crontab -r

  1. ### 删除某用户名下的定时任务,此命令需以 root 用户身份执行

  2. crontab -r -u username

使用特殊字符串来节省时间

你可以使用以下 8 个特殊字符串中的其中一个替代头五个字段,这样不但可以节省你的时间,还可以提高可读性。

特殊字符含义

@reboot

在每次启动时运行一次

@yearly

每年运行一次,等同于 “0 0 1 1 *”.

@annually

(同 @yearly)

@monthly

每月运行一次, 等同于 “0 0 1 * *”.

@weekly

每周运行一次, 等同于 “0 0 * * 0”.

@daily

每天运行一次, 等同于 “0 0 * * *”.

@midnight

(同 @daily)

@hourly

每小时运行一次, 等同于 “0 * * * *”.

示例:

每小时运行一次 ntpdate 命令

  1. @hourly /path/to/ntpdate

关于/etc/crontab文件和/etc/cron.d/*目录的更多内容

/etc/crontab是系统的 crontab 文件。通常只被 root 用户或守护进程用于配置系统级别的任务。每个单独的用户必须像上面介绍的那样使用crontab命令来安装和编辑自己的任务。/var/spool/cron/或者/var/cron/tabs/目录存放了个人用户的 crontab 文件,它应该备份在用户的家目录当中。

理解默认的/etc/crontab文件

典型的/etc/crontab文件内容是这样的:

  1. SHELL=/bin/bash

  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin

  3. MAILTO=root

  4. HOME=/

  5. # run-parts

  6. 01 * * * * root run-parts /etc/cron.hourly

  7. 02 4 * * * root run-parts /etc/cron.daily

  8. 22 4 * * 0 root run-parts /etc/cron.weekly

  9. 42 4 1 * * root run-parts /etc/cron.monthly

首先,环境变量必须被定义。如果 SHELL 行被忽略,cron 会使用默认的 sh shell。如果 PATH 变量被忽略,就没有默认的搜索路径,所有的文件都需要使用绝对路径来定位。如果 HOME 变量被忽略,cron 会使用调用者(用户)的家目录替代。

另外,cron 会读取/etc/cron.d/目录中的文件。通常情况下,像 sa-update 或者 sysstat 这样的系统守护进程会将他们的定时任务存放在此处。作为 root 用户或者超级用户,你可以使用以下目录来配置你的定时任务。你可以直接将脚本放到这里。run-parts命令会通过/etc/crontab文件来运行位于某个目录中的脚本或者程序。

目录描述

/etc/cron.d/

将所有的脚本文件放在此处,并从 /etc/crontab 文件中调用它们。

/etc/cron.daily/

运行需要 每天 运行一次的脚本

/etc/cron.hourly/

运行需要 每小时 运行一次的脚本

/etc/cron.monthly/

运行需要 每月 运行一次的脚本

/etc/cron.weekly/

运行需要 每周 运行一次的脚本

备份定时任务

  1. # crontab -l > /path/to/file

  2. # crontab -u user -l > /path/to/file

via:

作者:Duy NguyenViet[5]译者:mr-ping[6]校对:FSSlc[7]

本文由LCTT[8]原创编译,Linux中国[9]荣誉推出

[1]:

[2]:

[3]:

[4]:

[5]:

[6]:

[7]:

[8]:

[9]:

(编辑:武陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!