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 运行命令或脚本。