使用Crontab安排Cron作业

Cron是一个调度守护程序,它以指定的时间间隔执行任务。 这些任务称为cron作业,主要用于自动进行系统维护或管理。

例如,您可以设置一个cron作业来自动执行重复性任务,例如备份数据库或数据,使用最新的安全补丁更新系统,检查磁盘空间使用情况,发送电子邮件等等。

可以将cron作业安排为按分钟,小时,每月的某天,每月,某周的某天或它们的任意组合运行。

什么是Crontab文件#

Crontab(cron表)是一个文本文件,用于指定cron作业的计划。 有两种类型的crontab文件。 系统范围的crontab文件和单个用户crontab文件。

用户的crontab文件是根据用户名命名的,其位置因操作系统而异。 在基于Red Hat的发行版(例如CentOS)中,crontab文件存储在 /var/spool/cron 目录,而在Debian和Ubuntu上,文件存储在 /var/spool/cron/crontabs 目录。

尽管您可以手动编辑用户crontab文件,但建议使用 crontab 命令。

/etc/crontab 文件和里面的脚本 /etc/cron.d 目录是系统范围的crontab文件,只能由系统管理员编辑。

在大多数Linux发行版中,您也可以将脚本放入 /etc/cron.{hourly,daily,weekly,monthly} 目录,脚本将在每个 hour/day/week/month

Crontab语法和运算符

用户crontab文件中的每一行都包含六个字段,各字段之间用空格分隔,后跟要运行的命令。

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

前五个字段可以包含一个或多个用逗号分隔的值或用连字符分隔的值范围。

  • * -星号运算符表示任何值或总是。 如果“小时”字段中有星号,则表示该任务将每小时执行一次。
  • , -逗号运算符允许您指定要重复的值的列表。 例如,如果您有 1,3,5 在“小时”字段中,任务将在凌晨1点,凌晨3点和凌晨5点运行。
  • - -连字符运算符允许您指定一个值范围。 如果你有 1-5 在“星期几”字段中,任务将在每个工作日(从星期一到星期五)运行。
  • / -斜杠运算符允许您指定将在它们之间的特定间隔内重复的值。 例如,如果您有 */4 在“小时”字段中,这意味着将每四个小时执行一次操作。 与指定相同 0,4,8,12,16,20。 除了使用斜杠运算符之前的星号,您还可以使用一系列值, 1-30/10 与…相同 1,11,21

系统范围的Crontab文件#

系统级crontab文件的语法与用户crontabs略有不同。 它包含一个附加的必填用户字段,该字段指定哪个用户将运行cron作业。

* * * * * <username> command(s)

预定义的宏

有几个特殊的Cron时间表宏用于指定公共间隔。 您可以使用这些快捷方式代替五列日期规范。

  • @yearly (要么 @annually)-每年1月1日午夜(12:00 am)运行一次指定的任务。 相当于 0 0 1 1 *
  • @monthly -每个月的第一天的午夜每个月运行一次指定的任务。 相当于 0 0 1 * *
  • @weekly -每周一次在星期日的午夜运行指定的任务。 相当于 0 0 * * 0
  • @daily -每天午夜运行一次指定的任务。 相当于 0 0 * * *
  • @hourly -在小时开始时每小时执行一次指定的任务。 相当于 0 * * * *
  • @reboot -在系统启动时(启动时)运行指定的任务。

Linux Crontab命令#

crontab 命令允许您安装,查看或打开crontab文件进行编辑:

  • crontab -e -编辑crontab文件,如果尚不存在,请创建一个。
  • crontab -l -显示crontab文件内容。
  • crontab -r -删除当前的crontab文件。
  • crontab -i -删除前,请先通过提示删除当前的crontab文件。
  • crontab -u <username> -编辑其他用户crontab文件。 此选项需要系统管理员特权。

crontab命令使用由指定的编辑器打开crontab文件。 VISUAL 要么 EDITOR 环境变量。

Crontab变量

cron守护程序会自动设置几个环境变量。

  • 默认路径设置为 PATH=/usr/bin:/bin。 如果您正在执行的命令不在cron指定的路径中,则可以使用命令的绝对路径或更改cron $PATH 变量。 您不能隐式附加 :$PATH 就像使用常规脚本一样。
  • 默认外壳设置为 /bin/sh。 要更改其他外壳,请使用 SHELL 变量。
  • Cron从用户的主目录调用该命令。 的 HOME 变量可以在crontab中设置。
  • 电子邮件通知将发送给crontab的所有者。 要覆盖默认行为,您可以使用 MAILTO 环境变量,其中包含要接收电子邮件通知的所有电子邮件地址的列表(用逗号分隔)。 什么时候 MAILTO 已定义但为空(MAILTO=""),则不会发送邮件。

Crontab限制

/etc/cron.deny/etc/cron.allow 文件可让您控制哪些用户有权访问 crontab 命令。 这些文件由用户名列表组成,每行一个用户名。

默认情况下,仅 /etc/cron.deny 文件存在且为空,这意味着所有用户都可以使用crontab命令。 如果要拒绝特定用户对crontab命令的访问,请将用户名添加到该文件中。

如果 /etc/cron.allow 文件存在,只有此文件中列出的用户可以使用 crontab 命令。

如果两个文件都不存在,则只有具有管理权限的用户才能使用 crontab 命令。

Cron Jobs示例#

以下是一些cron作业示例,它们显示了如何计划任务在不同时间段运行。

  • 从星期一到星期五,每天的15:00运行命令:

    0 15 * * 1-5 command
  • 每5分钟运行一个脚本,并将标准输出重定向到 dev null,只有标准错误会发送到指定的电子邮件地址:

    [email protected]
    */5 * * * * /path/to/script.sh > /dev/null
  • 每个星期一下午3点运行两个命令(使用操作员 && 命令之间):

    0 15 * * Mon command1 && command2
  • 每2分钟运行一次PHP脚本,然后将输出写入文件:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
  • 每天每天从上午8点到下午4点运行脚本:

    00 08-16 * * * /path/to/script.sh
  • 在每个月的第一个星期一上午7点运行脚本

    0 7 1-7 * 1 /path/to/script.sh
  • 在每月的1号和15号晚上9:15运行脚本。

    15 9 1,15 * * /path/to/script.sh
  • 设置自定义 HOMEPATHSHELLMAILTO 变量并每分钟运行一条命令。

    HOME=/opt
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/usr/bin/zsh
    [email protected]
    
    */1 * * * * command

结论#

Cron是一个守护程序,可让您在特定的日期和时间安排任务。

如有任何疑问,请随时发表评论。

cron crontab终端

Sidebar