Linux 任务调度方法速览
一 概览与适用场景
二 方法对比
| 方法 | 触发类型 | 配置入口 | 典型用途 | 关键要点 |
|---|---|---|---|---|
| cron/crond | 周期性 | /etc/crontab、/etc/cron.d/、crontab -e | 日志清理、备份、报表 | 分钟级扫描;注意环境变量、输出重定向、幂等性 |
| at / batch | 一次性 | at、atq、atrm;batch | 临时维护、延迟任务 | 需 atd 运行;batch 按负载触发 |
| systemd 定时器 | 周期或日历 | .timer + .service | 与 systemd 服务联动 | OnCalendar(日历)/ OnUnitActiveSec(单调);日志经 journald |
| 内核实时调度 | 运行时机由策略决定 | sched_setscheduler / chrt | 实时计算、工业控制 | SCHED_FIFO/RR(1–99) 可抢占普通任务;谨慎使用以免影响系统稳定性 |
三 快速上手示例
crontab -e*/1 * * * * date >> /tmp/mydate
0 2 * * * /usr/bin/mysqldump -u root -p'密码' testdb > /home/db_$(date +\%F).bak
at 14:00,输入命令后以 Ctrl+D 结束echo "systemctl restart nginx" | at now + 5 minutesatq 查看队列,atrm <ID> 删除任务;确保 atd 已启动。[Unit]
Description=Daily Backup
[Service]
Type=oneshot
ExecStart=/usr/bin/mysqldump -u root -p'密码' testdb > /backup/db_$(date +%%F).bak
[Unit]
Description=Run backup daily at 02:00
[Timer]
OnCalendar=*-*-* 02:00:00
Unit=backup.service
[Install]
WantedBy=timers.target
systemctl daemon-reload && systemctl enable --now backup.timer,查看:systemctl list-timers。四 实践要点与排错
journalctl -u crond 查看。