温馨提示×

ubuntu定时任务怎么设置

小樊
48
2025-11-24 07:11:24
栏目: 智能运维

Ubuntu 定时任务设置指南

一 使用 Cron 快速上手

  • 安装与启动:大多数系统自带 cron,如未安装可执行 sudo apt-get install cron;启动/重启可用 sudo service cron start|restart,查看状态用 service cron status。为确认守护进程是否在运行,可执行 pgrep cron,有输出即表示已运行。
  • 编辑任务:执行 crontab -e 编辑当前用户的计划任务;如需为指定用户编辑,使用 sudo crontab -u username -e。保存后 cron 会自动加载,无需手动重启。
  • 常用管理命令:
    • 列出任务:crontab -l
    • 删除全部任务:crontab -r(谨慎使用;也可用 crontab -i -r 在删除前确认)
    • 参数速览:-e 编辑、-l 列出、-r 删除、-u 指定用户
  • 时间格式与特殊符号:
    • 格式:分 时 日 月 周 命令(5 个时间字段 + 命令),取值范围:分钟 0-59、小时 0-23、日期 1-31、月份 1-12、星期 0-7(0 和 7 均为周日)
    • 符号:*(任意)、/(步长,如 */5 表示每 5 个单位)、-(范围,如 9-17)、,(枚举,如 3,6,9)。

二 常用 Cron 示例

  • 每天 06:00 执行脚本:
    • 0 6 * * * /home/user/backup.sh
  • 5 分钟 执行一次:
    • */5 * * * * /usr/local/bin/check.sh
  • 每周二 20:30 执行:
    • 30 20 * * 2 /usr/local/bin/report.sh
  • 每月 1 号 02:00 执行并写入日志:
    • 0 2 1 * * /usr/local/bin/monthly.sh >> /var/log/monthly.log 2>&1
  • 工作日(周一至周五)09:00 执行:
    • 0 9 * * 1-5 /usr/local/bin/workday.sh
      提示:在脚本中尽量使用绝对路径,并显式处理输出与错误(如重定向到日志),便于排查问题。

三 运行环境与日志排错

  • 环境与权限:cron 的执行环境不同于登录 Shell,建议在 crontab 顶部显式设置 PATH,必要时导出所需变量;脚本务必赋予可执行权限(如 chmod +x /path/script.sh)。
  • 日志查看:默认情况下 cron 日志可能未开启。可编辑 /etc/rsyslog.d/50-default.conf,取消注释行 cron. /var/log/cron.log*,然后重启 rsyslogsudo service rsyslog restart),之后使用 less /var/log/cron.logtail -f /var/log/cron.log 查看任务执行情况与报错信息。

四 进阶方案

  • systemd 定时器(适合复杂依赖与日历规则):
    1. 创建服务单元(如 /etc/systemd/system/my_script.service):
    [Unit]
    Description=My script service
    [Service]
    Type=simple
    ExecStart=/path/to/your/script.sh
    
    1. 创建定时器单元(如 /etc/systemd/system/my_script.timer):
    [Unit]
    Description=Run my script every hour
    [Timer]
    OnBootSec=1min
    OnUnitActiveSec=1h
    Unit=my_script.service
    [Install]
    WantedBy=timers.target
    
    1. 启用并启动:
    • sudo systemctl enable my_script.timer
    • sudo systemctl start my_script.timer
    • 查看:sudo systemctl status my_script.timersudo systemctl list-timers --all
  • 一次性任务:使用 at(如 sudo apt-get install at 后执行 at 22:00 2025-12-01 并输入命令,以 Ctrl+D 结束)。适合临时、非周期性的任务。

0