📜  Linux 中的 cron 命令和示例

📅  最后修改于: 2022-05-13 01:57:26.664000             🧑  作者: Mango

Linux 中的 cron 命令和示例

cron是一种软件实用程序,由类似 Linux 的操作系统提供,可在预定时间自动执行计划任务。它是一个守护进程,它作为后台进程运行,并在触发某个事件或条件时在预定义的时间执行指定的操作,而无需用户干预。经常处理重复的任务对于系统管理员来说是一项令人生畏的任务,因此他可以通过使用cron创建这些命令的列表来安排这些进程定期在后台自动运行。它使用户能够在不引人注目的情况下定期执行计划任务,例如每天午夜进行备份,每周安排更新,定期同步文件。 Cron 会反复检查计划作业,当计划时间字段与当前时间字段匹配时,执行计划命令。在进入多用户运行级别时,它会从 /etc/init.d 自动启动。
句法:

cron [-f] [-l] [-L loglevel]

选项:

  • -f :用于保持前台模式,不守护进程。
  • -l :这将为 /etc/cron.d 文件启用 LSB 兼容名称。
  • -n :用于在发送邮件时在主题中添加 FQDN。
  • -L loglevel :此选项将告诉 cron 使用以下值记录有关作业的内容:
    • 1 :它将记录所有 cron 作业的开始。
    • 2 :它将记录所有 cron 作业的结束。
    • 4 :它将记录所有失败的作业。这里退出状态将不等于零。
    • 8:它会记录所有cron作业的进程号。

crontab (“cron table”的缩写)是在特定时间执行计划任务的命令列表。它允许用户添加、删除或修改计划任务。 crontab 命令语法有六个由空格分隔的字段,其中前五个代表运行任务的时间,最后一个代表命令的时间。

  • 分钟(保持 0-59 之间的值)
  • 小时(保持 0-23 之间的值)
  • 月份中的某天(保持 1-31 之间的值)
  • 一年中的月份(值介于 1-12 或 Jan-Dec 之间,应使用月份名称的前三个字母)
  • 星期几(值介于 0-6 或 Sun-Sat 之间,此处也应使用当天的前三个字母)
  • 命令

控制日期和时间字段格式的规则如下:

  • 当前五个字段中的任何一个设置为星号 (*) 时,它代表该字段的所有值。例如,要每天执行一个命令,我们可以在周字段中放置一个星号(*)。
  • 还可以使用一系列数字,在时间和日期字段中用连字符 (-) 分隔,以包含多个连续值但不是该字段的所有值。例如,我们可以使用 7-10 来运行从 7 月到 10 月的命令。
  • 逗号 (, )运算符用于包含一个数字列表,这些数字可能是连续的,也可能不是连续的。例如,周字段中的“1、3、5”表示每周一、周三和周五执行命令。
  • 包含斜杠字符(/) 以跳过给定数量的值。例如,小时字段中的“*/4”指定“每 4 小时”,相当于 0、4、8、12、16、20。

允许用户运行 cron 作业:

  • 如果文件存在,用户必须列在此文件中才能运行 cron 作业。
/etc/cron.allow
  • 如果 cron.allow 文件不存在但 cron.deny 文件存在,则不能在此文件中列出用户才能运行 cron 作业。
/etc/cron.deny

注意:如果这些文件都不存在,那么只有超级用户(系统管理员)才能使用给定的命令。
示例命令:

  • 每天从上午 9:00 到下午 6:00 每小时运行一次 /home/folder/gfg-code.sh。
00 09-18 * * * /home/folder/gfg-code.sh
  • 每个工作日晚上 11:30 运行 /usr/local/bin/backup。
30 23 * * Mon, Tue, Wed, Thu, Fri /usr/local/bin/backup
  • 在 07:30、09:30、13:30 和 15:30 运行 sample-command.sh。
30 07, 09, 13, 15 * * * sample-command.sh

使用 cron 时应记住以下几点:

  • 有一个源版本控制来跟踪和维护对 cron 表达式的更改。
  • 根据其重要性或频率组织计划的作业,并按其操作或时间范围对它们进行分组。
  • 通过最初的高频率测试计划的作业。
  • 不要直接在 cron 表达式中编写复杂的代码或几个管道和重定向。相反,将它们写入脚本并将脚本调度到 cron 选项卡。
  • 当同一组命令频繁重复时使用别名。
  • 避免以 root 用户身份通过 cron 运行命令或脚本。