温馨提示×

Linux进程如何定时启动

小樊
68
2026-07-21 20:28:45
栏目: 智能运维

在 Linux 中,定时启动进程/任务常见有几种方式,按使用场景从简单到复杂说明如下:


一、使用 cron(最常用)

1️⃣ 适合场景

  • 周期性任务(每分钟、每小时、每天、每周等)
  • 服务器后台任务
  • 不需要交互

2️⃣ 基本用法

编辑当前用户的 cron 表:

crontab -e

3️⃣ 时间格式

分 时 日 月 星期 命令

示例:

需求 表达式
每分钟执行 * * * * *
每小时 0 * * * *
每天 2:30 30 2 * * *
每周一 8:00 0 8 * * 1
每 10 分钟 */10 * * * *

4️⃣ 示例:定时启动进程

*/5 * * * * /home/user/run.sh

或后台执行:

*/5 * * * * /usr/bin/python3 /home/user/task.py >> /tmp/task.log 2>&1

二、使用 at(一次性定时)

1️⃣ 适合场景

  • 只执行一次
  • 指定某个时间点

2️⃣ 示例

at 14:30

然后输入:

/home/user/run.sh

Ctrl+D 结束

3️⃣ 查看任务

atq

删除任务:

atrm 任务号

三、在程序中定时(进程自己控制)

1️⃣ 使用 sleep

while true; do
    ./my_program
    sleep 60
done

⚠️ 不推荐长期运行,容易失控


四、使用 systemd timer(现代 Linux 推荐)

1️⃣ 适合场景

  • 替代 cron
  • 精确控制
  • 与 systemd 服务结合

2️⃣ 示例

创建 service

# /etc/systemd/system/mytask.service
[Unit]
Description=My Task

[Service]
ExecStart=/home/user/run.sh

创建 timer

# /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

五、开机自动启动进程

1️⃣ 使用 cron

@reboot /home/user/run.sh

2️⃣ 使用 systemd

[Service]
ExecStart=/home/user/run.sh
Restart=always

六、方式对比

方式 是否周期 是否推荐 说明
cron ⭐⭐⭐⭐ 最常用
at ⭐⭐ 一次性
sleep 不推荐
systemd timer ⭐⭐⭐⭐⭐ 现代服务器首选

七、常见问题

❓ cron 没执行?

  • 检查路径(用绝对路径)
  • 查看日志:
tail -f /var/log/cron

❓ 环境变量问题?

cron 环境变量很少,建议:

PATH=/usr/bin:/bin

如果你愿意,可以告诉我:

  • ✅ 是 一次性 还是 周期性
  • ✅ 是 用户进程 还是 系统服务
  • ✅ 是否要 开机启动

我可以给你一个完全可用的配置示例

0