乐闻世界logo
搜索文章和话题

Linux 定时任务 cron 的时间格式、常用命令和最佳实践有哪些?

2月17日 23:39

Linux 定时任务(cron)是自动化运维的重要工具,可以定期执行脚本和命令。

cron 基本概念:

  • cron 是 Linux 系统的定时任务调度器
  • 由 cron 守护进程(crond)负责执行定时任务
  • 配置文件:/etc/crontab(系统级)、/var/spool/cron/username(用户级)
  • 时间格式:分 时 日 月 周 命令

时间格式说明:

  • 分(0-59):每小时的第几分钟
  • 时(0-23):每天的第几小时
  • 日(1-31):每月的第几天
  • 月(1-12):每年的第几个月
  • 周(0-7,0 和 7 都表示周日):每周的第几天

特殊符号:

  • *:匹配所有值
  • ,:分隔多个值,如 1,3,5 表示第 1、3、5
  • -:表示范围,如 1-5 表示 1 到 5
  • /n:表示间隔,如 */5 表示每 5 个单位

常用示例:

  • 每分钟执行:* * * * * command
  • 每小时执行:0 * * * * command
  • 每天凌晨 2 点执行:0 2 * * * command
  • 每周一凌晨 3 点执行:0 3 * * 1 command
  • 每月 1 号凌晨 4 点执行:0 4 1 * * command
  • 每 5 分钟执行一次:*/5 * * * * command
  • 工作日(周一到周五)每天上午 9 点执行:0 9 * * 1-5 command

crontab 命令:

  • crontab -e:编辑当前用户的定时任务
  • crontab -l:列出当前用户的定时任务
  • crontab -r:删除当前用户的所有定时任务
  • crontab -u username -e:编辑指定用户的定时任务(需要 root 权限)

系统级定时任务:

  • /etc/crontab:系统级定时任务配置文件
  • /etc/cron.hourly/:每小时执行的任务目录
  • /etc/cron.daily/:每天执行的任务目录
  • /etc/cron.weekly/:每周执行的任务目录
  • /etc/cron.monthly/:每月执行的任务目录

环境变量:

  • cron 任务执行时环境变量与用户登录时不同
  • 可以在 crontab 文件中定义环境变量
  • 建议在脚本中使用绝对路径
  • 可以在脚本开头 source 环境变量文件:source ~/.bashrc

日志和调试:

  • cron 日志位置:/var/log/syslog 或 /var/log/cron
  • 查看日志:grep CRON /var/log/syslog
  • 调试技巧:将输出重定向到日志文件:command >> /tmp/cron.log 2>&1
  • 发送邮件:cron 默认会将输出发送到用户邮箱

最佳实践:

  • 使用绝对路径
  • 在脚本中设置正确的环境变量
  • 添加日志记录便于调试
  • 使用锁文件防止重复执行
  • 测试脚本后再添加到 cron
  • 合理设置执行时间,避免系统高峰期
  • 定期检查 cron 任务执行情况

常见问题:

  • 脚本权限不足:确保脚本有执行权限(chmod +x script.sh)
  • 环境变量问题:在脚本中显式设置环境变量
  • 路径问题:使用绝对路径或切换到正确目录
  • 时区问题:确保系统时区正确
  • cron 服务未启动:systemctl status cron 或 systemctl start cron

anacron(异步 cron):

  • 用于不是 24 小时运行的系统
  • 配置文件:/etc/anacrontab
  • 适合笔记本电脑等不常开机的设备
  • 会检查上次执行时间,如果错过则补执行

systemd 定时器:

  • systemd 的定时任务替代方案
  • 配置文件:/etc/systemd/system/*.timer
  • 查看定时器:systemctl list-timers
  • 更灵活的调度选项
  • 更好的日志集成
标签:Linux