Linux cron 命令实用示例

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将探索 Linux 中的 cron 服务,这是一个基于时间的任务调度器。我们将学习如何查看和编辑 crontab,安排一个简单的 cron 任务,以及配置 cron 通知和日志记录。cron 服务是 Linux 的内置功能,本实验中使用的命令在不同 Linux 发行版中广泛支持。通过本实验,你将深入了解如何使用 cron 服务有效地管理和调度任务。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/tail("File End Display") linux/SystemInformationandMonitoringGroup -.-> linux/crontab("Job Scheduling") linux/SystemInformationandMonitoringGroup -.-> linux/date("Date/Time Displaying") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/echo -.-> lab-422618{{"Linux cron 命令实用示例"}} linux/tail -.-> lab-422618{{"Linux cron 命令实用示例"}} linux/crontab -.-> lab-422618{{"Linux cron 命令实用示例"}} linux/date -.-> lab-422618{{"Linux cron 命令实用示例"}} linux/service -.-> lab-422618{{"Linux cron 命令实用示例"}} linux/apt -.-> lab-422618{{"Linux cron 命令实用示例"}} end

理解 cron 服务和 Crontab

在这一步中,我们将探索 Linux 中的 cron 服务,这是一个基于时间的任务调度器。我们将学习如何查看和编辑 crontab,这是 cron 任务的配置文件。

首先,让我们检查 cron 服务的状态:

sudo systemctl status cron

示例输出:

● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-04-28 12:34:56 UTC; 1 day 2h ago
   Main PID: 589 (cron)
      Tasks: 1 (limit: 4915)
     Memory: 1.3M
        CPU: 1ms
     CGroup: /system.slice/cron.service
             └─589 /usr/sbin/cron -f

输出显示 cron 服务处于活动状态并正在运行。

接下来,让我们查看 labex 用户的当前 crontab:

crontab -l

这将列出当前用户的所有计划任务。由于这是一个新环境,crontab 应该是空的。

要编辑 crontab,请运行:

crontab -e

这将打开 crontab 编辑器,你可以在其中添加、修改或删除 cron 任务条目。crontab 文件使用特定的格式来定义任务何时运行:

* * * * * /path/to/script.sh

五个星号分别代表以下内容:

  1. 分钟 (0-59)
  2. 小时 (0-23)
  3. 日期 (1-31)
  4. 月份 (1-12)
  5. 星期几 (0-6,其中 0 代表星期日)

你可以根据需要自定义这些值来安排你的 cron 任务。

安排一个简单的 Cron 任务

在这一步中,我们将创建一个简单的 cron 任务,每分钟运行一次脚本。

首先,让我们创建一个示例脚本,稍后将其安排到 cron 中:

nano ~/project/cron_job.sh

将以下内容添加到文件中:

#!/bin/bash
echo "Cron job ran at $(date)" >> ~/project/cron_output.log

保存并退出文件。

现在,让我们将 cron 任务添加到 labex 用户的 crontab 中:

crontab -e

在 crontab 中添加以下行:

* * * * * /home/labex/project/cron_job.sh

这将每分钟运行一次 cron_job.sh 脚本。

保存并退出 crontab 编辑器。

为了验证 cron 任务是否正在运行,等待一分钟后检查 cron_output.log 文件:

cat ~/project/cron_output.log

你应该会看到输出,显示 cron 任务运行时的当前日期和时间。

配置 Cron 通知和日志记录

在这最后一步中,我们将配置 cron 以发送 cron 任务输出的电子邮件通知,并启用详细的日志记录。

首先,让我们安装必要的包以启用电子邮件通知:

sudo apt-get update
sudo apt-get install -y mailutils

接下来,我们需要为 labex 用户配置电子邮件设置。打开 crontab 编辑器:

crontab -e

在文件顶部添加以下行:

[email protected]

这将把任何 cron 任务的输出发送到指定的电子邮件地址。

现在,让我们为 cron 服务启用详细的日志记录。编辑 cron 配置文件:

sudo nano /etc/crontab

找到以下行:

#EXTRA_OPTS=""

取消注释并将其更改为:

EXTRA_OPTS="-l 7"

这将日志级别设置为 7,这是最详细的级别。保存并退出文件。

重启 cron 服务以应用更改:

sudo systemctl restart cron

现在,任何 cron 任务的输出或错误都将记录在 /var/log/cron.log 文件中,你可以使用以下命令查看:

sudo tail -n 20 /var/log/cron.log

总结

在本实验中,你学习了 Linux 中的 cron 服务,这是一个基于时间的任务调度器。你探索了如何查看和编辑 crontab(cron 任务的配置文件),以及如何安排一个每分钟运行一次脚本的简单 cron 任务。你还了解了 crontab 文件的格式以及定义任务运行时间的不同字段。最后,你配置了 cron 通知和日志记录,以监控计划任务的执行情况。

Linux 命令速查表