/etc/crontab
或 crontab -e
配置# 查看当前用户的crontab
crontab -l
# 编辑当前用户的crontab
crontab -e
添加环境变量:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com
日志记录优化:
# 将输出和错误重定向到日志文件
* * * * * /path/to/command >> /var/log/cron_job.log 2>&1
防止任务重叠:
# 使用flock防止任务重叠执行
* * * * * /usr/bin/flock -n /tmp/myjob.lock /path/to/command
资源限制:
# 使用nice调整优先级
* * * * * nice -n 19 /path/to/cpu_intensive_command
/etc/systemd/system/
├── myjob.service
└── myjob.timer
/etc/systemd/system/myjob.service
:
[Unit]
Description=My custom job
[Service]
Type=simple
ExecStart=/path/to/command
User=myuser
Group=mygroup
/etc/systemd/system/myjob.timer
:
[Unit]
Description=Run myjob every hour
[Timer]
OnCalendar=*-*-* *:00:00
Unit=myjob.service
[Install]
WantedBy=timers.target
OnCalendar=*-*-* 00,12:00:00
- 每天午夜和中午OnCalendar=Mon *-*-* 00:00:00
- 每周一午夜OnCalendar=*-*-01 00:00:00
- 每月第一天OnBootSec=5min
- 启动后5分钟运行OnUnitActiveSec=1h
- 上次激活后1小时运行# 启用并启动定时器
sudo systemctl enable myjob.timer
sudo systemctl start myjob.timer
# 查看定时器状态
systemctl list-timers
systemctl status myjob.timer
# 查看日志
journalctl -u myjob.service
[Service]
...
MemoryLimit=500M
CPUQuota=50%
IOWeight=100
[Timer]
...
RandomizedDelaySec=300 # 随机延迟最多5分钟
[Unit]
...
ConditionPathExists=/path/to/required/file
ConditionACPower=true
# 检查cron日志
grep CRON /var/log/syslog
# 或对于systemd系统
journalctl -u cron.service
# 查看所有活动定时器
systemctl list-timers --all
# 查看特定定时器的下次触发时间
systemctl list-timers | grep myjob
[Service]
...
Restart=on-failure
RestartSec=60s
简单任务迁移示例:
0 * * * * /usr/bin/backup.sh
ini
[Timer]
OnCalendar=*-*-* *:00:00
复杂任务迁移:
5 4 * * * /usr/bin/full-backup && /usr/bin/send-report
通过合理选择和使用这些工具,您可以构建更可靠、更易维护的定时任务系统。