在 Linux 中,定时启动进程/任务常见有几种方式,按使用场景从简单到复杂说明如下:
cron(最常用)编辑当前用户的 cron 表:
crontab -e
分 时 日 月 星期 命令
示例:
| 需求 | 表达式 |
|---|---|
| 每分钟执行 | * * * * * |
| 每小时 | 0 * * * * |
| 每天 2:30 | 30 2 * * * |
| 每周一 8:00 | 0 8 * * 1 |
| 每 10 分钟 | */10 * * * * |
*/5 * * * * /home/user/run.sh
或后台执行:
*/5 * * * * /usr/bin/python3 /home/user/task.py >> /tmp/task.log 2>&1
at(一次性定时)at 14:30
然后输入:
/home/user/run.sh
按 Ctrl+D 结束
atq
删除任务:
atrm 任务号
sleepwhile true; do
./my_program
sleep 60
done
⚠️ 不推荐长期运行,容易失控
systemd timer(现代 Linux 推荐)# /etc/systemd/system/mytask.service
[Unit]
Description=My Task
[Service]
ExecStart=/home/user/run.sh
# /etc/systemd/system/mytask.timer
[Unit]
Description=Run mytask every 10 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=10min
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable mytask.timer
systemctl start mytask.timer
查看状态:
systemctl list-timers
cron@reboot /home/user/run.sh
systemd[Service]
ExecStart=/home/user/run.sh
Restart=always
| 方式 | 是否周期 | 是否推荐 | 说明 |
|---|---|---|---|
| cron | ✅ | ⭐⭐⭐⭐ | 最常用 |
| at | ❌ | ⭐⭐ | 一次性 |
| sleep | ✅ | ⭐ | 不推荐 |
| systemd timer | ✅ | ⭐⭐⭐⭐⭐ | 现代服务器首选 |
tail -f /var/log/cron
cron 环境变量很少,建议:
PATH=/usr/bin:/bin
如果你愿意,可以告诉我:
我可以给你一个完全可用的配置示例。