ubuntu虚拟机定时任务如何设置
小樊
40
2026-01-03 01:36:47
Ubuntu 虚拟机定时任务设置指南
一 快速上手
- 编辑当前用户的定时任务
- 命令:crontab -e
- 选择编辑器(首次会提示),在打开的文件中添加一行任务,保存退出即可生效
- 常用管理
- 查看:crontab -l
- 删除全部:crontab -r(谨慎,建议用 -e 逐条删除)
- 指定用户(root):sudo crontab -e
- 说明
- 任务以当前用户身份运行;如需系统级任务,可用 root 的 crontab 或放入系统目录(见下文进阶)
二 时间格式与常用示例
- 时间字段顺序:分 时 日 月 周 命令(取值范围:分 0–59,时 0–23,日 1–31,月 1–12,周 0–6,0 表示周日)
- 特殊符号
- * 任意值;/ 间隔(如 */5 表示每 5 个单位);- 范围;, 枚举
- 常用示例
- 每 5 分钟:*/5 * * * * /usr/bin/python3 /home/ubuntu/do.py >> /home/ubuntu/cron.log 2>&1
- 每天 03:30:30 3 * * * /usr/local/bin/backup.sh
- 每周一 09:00:0 9 * * 1 /usr/bin/rsync -a /data /backup
- 每月 1 日 00:00:0 0 1 * * /opt/scripts/monthly_report.sh
- 实践建议
- 脚本和文件路径尽量使用绝对路径
- 命令输出建议重定向到日志文件,便于排查(如:>> /var/log/mytask.log 2>&1)
三 服务管理与日志排查
- 确认 cron 服务运行
- 查看状态:sudo systemctl status cron 或 service cron status
- 启动/停止/重启:sudo systemctl start|stop|restart cron
- 开机自启:sudo systemctl enable cron
- 开启并使用日志(Ubuntu 默认可能未写入 cron 日志)
- 编辑:sudo nano /etc/rsyslog.d/50-default.conf,确保包含:cron. /var/log/cron.log*
- 重启日志服务:sudo systemctl restart rsyslog
- 查看日志:tail -f /var/log/cron.log
- 虚拟机环境提示
- 若使用 WSL2,可在 /etc/wsl.conf 中设置 systemd=true,重启 WSL 后使用 systemctl 管理 cron;WSL1 不支持 systemd
- 大多数虚拟机与云服务器默认已启用 systemd,可直接使用 systemctl 管理
四 进阶用法与常见问题
- 系统级任务与目录
- 系统级计划任务可放入 /etc/cron.d/(文件需设置合适的属主与权限,通常以 root 维护)
- 系统目录任务:/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly(由系统定时调用 run-parts 执行)
- 权限控制
- 可通过 /etc/cron.allow 与 /etc/cron.deny 控制哪些用户可使用 crontab(存在 allow 时仅允许列表内用户)
- 环境变量与路径
- cron 环境与交互式登录不同,建议在任务中显式设置 PATH,或使用命令的绝对路径
- 脚本首行指定解释器(如:#!/usr/bin/python3),并确保脚本有可执行权限:chmod +x /path/script.sh
- 每 30 秒执行
- cron 最小粒度为1 分钟,可用“双任务 + 睡眠”实现:
- * * * * * /usr/bin/python3 /home/ubuntu/do.py >> /home/ubuntu/run.log 2>&1
- * * * * * sleep 30 && /usr/bin/python3 /home/ubuntu/do.py >> /home/ubuntu/run.log 2>&1
- 常见排错清单
- 命令是否使用绝对路径;脚本是否有可执行权限
- 是否重定向了标准输出与错误输出(便于日志排查)
- 是否已在 /etc/rsyslog.d/50-default.conf 启用 cron.* 并重启 rsyslog
- 任务是否按预期时间运行(查看 /var/log/cron.log)