Linux Cron 定时任务

在 Linux 系统中,Cron 是一个用于调度定时任务的工具,允许用户在指定的时间或间隔自动执行脚本、命令或程序。它通过 crontab(Cron 表)配置文件来定义任务的执行时间和内容,非常适合自动化任务,如备份、日志清理或定时脚本运行。

一、Cron 基本概念

  • Cron 守护进程(crond):Linux 系统后台运行的进程,负责检查 crontab 文件并执行定时任务。
  • Crontab:每个用户的定时任务配置文件,存储任务的调度时间和命令。
  • 任务类型
  • 用户级:每个用户可以有自己的 crontab 文件。
  • 系统级:位于 /etc/crontab/etc/cron.* 目录,用于系统范围的任务。

二、Crontab 语法

Crontab 文件的每一行定义一个定时任务,格式如下:

* * * * * /path/to/your/script.sh
  • 五个星号表示时间字段,依次为:
  • 分钟(0-59)
  • 小时(0-23)
  • 日期(1-31)
  • 月份(1-12 或 jan-dec)
  • 星期(0-7,0 和 7 都表示周日)
  • 命令:要执行的脚本或命令(需包含完整路径)。
  • 特殊字符:
  • *:表示任意值(每分钟、每小时等)。
  • ,:列出多个值,例如 1,3,5 表示第 1、3、5 分钟。
  • -:范围,例如 1-5 表示 1 到 5。
  • /:步长,例如 */5 表示每 5 单位(分钟、小时等)。

三、常用示例

  1. 每分钟执行一次
   * * * * * /bin/echo "Hello" >> /tmp/log.txt

每分钟将 “Hello” 追加到 /tmp/log.txt

  1. 每天凌晨 2:30 执行备份
   30 2 * * * /bin/sh /backup.sh
  1. 每周一 8:00 执行任务
   0 8 * * 1 /usr/bin/python3 /script.py
  1. 每 5 分钟执行一次
   */5 * * * * /bin/bash /check_status.sh
  1. 每月 1 号和 15 号执行
   0 0 1,15 * * /bin/sh /monthly_task.sh

四、Crontab 操作

  1. 编辑当前用户的 crontab
   crontab -e

打开默认编辑器(通常是 vinano)来编辑 crontab 文件。

  1. 查看当前用户的 crontab
   crontab -l
  1. 删除当前用户的 crontab
   crontab -r
  1. 指定用户编辑 crontab(需要 root 权限):
   crontab -u username -e
  1. 系统级 crontab
    编辑 /etc/crontab 或在 /etc/cron.d/ 目录下创建文件,格式多一个用户字段:
   * * * * * username /path/to/script.sh

五、常见目录

  • /etc/crontab:系统级 crontab 文件。
  • /etc/cron.hourly//etc/cron.daily//etc/cron.weekly//etc/cron.monthly/:放置周期性脚本的目录,适合简单任务。
  • 示例:将脚本放入 /etc/cron.daily/,确保脚本可执行(chmod +x script.sh)。

六、注意事项

  1. 环境变量
  • Cron 运行时的环境变量有限,可能缺少用户环境中的变量(如 PATH)。
  • 解决方案:
    • 在脚本中显式设置环境变量,例如 PATH=/usr/bin:/bin
    • 使用完整路径运行命令,如 /usr/bin/python3 而不是 python3
  1. 输出重定向
  • 默认情况下,Cron 任务的输出会通过邮件发送给用户(需要邮件服务如 postfix)。
  • 重定向输出到文件: “`
    • * * * * /script.sh >> /var/log/script.log 2>&1
      `` (2>&1` 将标准错误重定向到标准输出)。
  1. 权限
  • 确保脚本或命令对运行用户有执行权限。
  • 检查 /etc/cron.allow/etc/cron.deny 文件,控制哪些用户可以运行 Cron 任务。
  1. 日志查看
  • Cron 日志通常在 /var/log/cron/var/log/syslog 中(视系统而定)。
  • 示例:
    bash grep CRON /var/log/syslog
  1. 调试
  • 任务不运行?检查语法、权限、路径、日志。
  • 手动运行脚本确认其正确性。

七、示例:定时清理日志

创建一个脚本 /clean_logs.sh

#!/bin/bash
find /var/log -name "*.log" -mtime +7 -delete

设置权限并添加到 crontab:

chmod +x /clean_logs.sh
crontab -e

添加:

0 3 * * * /clean_logs.sh

此任务每天凌晨 3:00 删除 7 天前的 .log 文件。

八、其他工具

  • anacron:适合非 24/7 运行的系统,处理错过的任务。
  • systemd timers:现代 Linux 系统的替代方案,功能更强大但配置稍复杂。

九、总结

Cron 是 Linux 中强大且灵活的定时任务工具,通过简单的 crontab 语法即可实现自动化任务。确保脚本路径正确、权限适当,并定期检查日志以避免问题。

如果需要更具体的配置示例、调试帮助或与 DOM 相关的定时任务(如通过脚本操作网页),请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注