已编辑 4 几个月前 通过 ExtremeHow 编辑团队
帽子Cron 调度任务计划自动化命令行终端系统管理配置软件计算机
翻译更新 4 几个月前
在 Linux 环境中,任务调度是管理服务器和自动化的重要部分。在 Fedora(一个非常流行的 Linux 发行版)上,cron 是最常用的任务调度工具之一。Cron 是 Unix 类操作系统中的基于时间的任务调度程序,它可以在指定的时间间隔或时间自动运行脚本或命令。您可以使用它来自动化系统维护、备份、监控或任何重复性任务。本指南将详细介绍如何在 Fedora 上使用 cron 安排任务。
Cron 使用称为 crontab(cron 表)的配置文件来管理任务调度。系统上的每个用户都可以拥有自己的 crontab 文件。在 crontab 文件中,每行代表一个计划任务。Cron 检查每个用户的 crontab 内容并运行其中定义的任务。这些任务由命令和时间表组成。
crontab 条目的基本语法是:
* * * * * command_to_run
* * * * * command_to_run
此语法表示:
示例:
30 2 * * 1 /home/user/backup.sh
30 2 * * 1 /home/user/backup.sh
此 cron 任务将在每周一(1 表示周一)凌晨 2:30 运行 /home/user/backup.sh
脚本。我们将更详细地了解每个部分,看看如何更好地使用此工具。
大多数 Fedora 安装会默认安装 cron 服务。如果没有安装,您可以轻松添加。要确保安装了 cron,请使用以下命令:
sudo dnf install cronie
sudo dnf install cronie
上述命令将安装负责管理 cron 任务的 cron 守护程序。安装后,请确保服务正在运行:
sudo systemctl start crond sudo systemctl enable crond
sudo systemctl start crond sudo systemctl enable crond
start
命令将启动 cron 服务,而 enable
命令确保它在启动时自动启动。
用户可以创建 crontab 文件以安排任务。这可以通过键入以下命令来完成:
crontab -e
crontab -e
上述命令打开一个编辑器,您可以在其中编写 cron 任务。如果您是第一次使用 crontab,可能会要求您选择一个编辑器。选择您喜欢的文本编辑器(例如 nano、vim 等)。
编辑 crontab 时,请确保每个 cron 任务命令按前面描述的语法正确指定。添加任务后,保存文件并退出编辑器。Cron 将自动注册更改。
现在我们知道如何访问 crontab 文件并创建 cron 任务,让我们看一些常见的例子:
0 * * * * /home/user/hourly-task.sh
0 * * * * /home/user/hourly-task.sh
这将在每小时开始时从主目录执行 hourly-task.sh
。
30 14 1 3 * echo "Remember to check logs" >> /home/user/notes.txt
30 14 1 3 * echo "Remember to check logs" >> /home/user/notes.txt
此命令将在 3 月 1 日下午 2:30 向 notes.txt
添加提醒。
0 0 * * 0/2 /home/user/cleanup.sh
0 0 * * 0/2 /home/user/cleanup.sh
在这个设置中,cleanup.sh
将在每隔一个周日午夜执行。
Cron 不会从用户的 .bashrc
、.profile
或类似文件加载环境变量。因此,如果您的脚本依赖于特定环境变量,可以在 cron 任务之前直接在 crontab 文件中定义它们:
PATH=/usr/local/bin:/bin:/usr/bin:/home/user/bin 30 1 * * * /home/user/some_command --options
PATH=/usr/local/bin:/bin:/usr/bin:/home/user/bin 30 1 * * * /home/user/some_command --options
每个 cron 任务都在特定的环境下运行,因此在 crontab 文件中确保设置正确的路径和变量非常重要。
Cron 允许在五个时间和日期字段的位置使用一些字符串,使调度变得更简单:
@reboot
:在启动后运行一次。@yearly
或 @annually
:每年运行一次,即 0 0 1 1 *
。@monthly
:每月运行一次,即 0 0 1 * *
。@weekly
:每周运行一次,即 0 0 * * 0
。@daily
:每天运行一次,即 0 0 * * *
。@hourly
:每小时运行一次,即 0 * * * *
。这些预定义的字符串使 crontab 条目更具可读性且书写速度更快。
例如,要每天运行一次 daily-maintenance.sh
脚本,您可以使用:
@daily /home/user/daily-maintenance.sh
@daily /home/user/daily-maintenance.sh
默认情况下,cron 将输出(包括 stdout 和 stderr)发送到本地计算机上的用户电子邮件。如果您希望将其重定向到文件,可以如下修改命令:
* * * * * /home/user/script.sh > /home/user/logfile 2>&1
* * * * * /home/user/script.sh > /home/user/logfile 2>&1
在这里,2>&1
将标准错误(stderr)重定向到标准输出(stdout),输出被写入 logfile
。
要列出当前用户的所有 cron 任务,请键入:
crontab -l
crontab -l
要删除当前用户的 crontab 文件,请使用:
crontab -r
crontab -r
调试可能很困难,因为 cron 有自己的环境,默认情况下不会加载用户的 shell 配置。以下是一些故障排除 cron 任务的步骤:
/var/log/cron
下或通过在 Fedora 中使用 journalctl
命令。虽然基本的调度可以处理大多数任务,但可以采用高级技术来满足更复杂的调度需求:
您可以为 crontab 中的任何字段指定值列表。例如,要在每个月的第一天和第十五天运行任务:
0 0 1,15 * * /home/user/payroll.sh
0 0 1,15 * * /home/user/payroll.sh
步长值允许在范围内指定间隔。例如,要每 10 分钟运行一次任务:
*/10 * * * * /home/user/check-system.sh
*/10 * * * * /home/user/check-system.sh
*/10
符号表示“每 10 分钟”。
Cron 是一个功能强大且多功能的任务自动化工具,适用于 Fedora 和许多其他 Unix 类系统。通过精确设置时间间隔和编写重复性任务,系统管理员和用户可以大大提高生产力和系统可靠性。理解并使用 cron 的功能可以显著减少手动工作量,能够高效安排任务否则需要持续关注和干预。
通过本指南,您现在应该对如何在 Fedora 上设置和管理 cron 任务有一个扎实的理解。无论您是进行基本调度,使用环境变量,重定向输出还是使用高级调度技术,cron 都提供了许多选项,以根据您的具体需求自定义任务管理。
进一步探索 crony 包,并通过尝试不同的作业深入研究其他选项和可能性,以帮助简化操作。自动化是高效系统管理的关键,掌握 cron 是 Linux 用户的基本技能。不断迭代和完善您的任务计划,并利用 cron 的强大功能让您的系统平稳高效地运行。
如果你发现文章内容有误, 您可以