温馨提示×

Debian定时器如何开机启动

小樊
35
2026-07-30 09:21:22
栏目: 智能运维

在 Debian(以及大多数使用 systemd 的现代 Linux 发行版)中,定时任务通常通过 systemd timer 来实现,并且可以设置为 开机自动启动。下面分步骤说明。


一、确认系统使用 systemd

ps -p 1 -o comm=

输出为 systemd 即可。


二、创建 service 单元(要执行的任务)

例如创建一个定时任务脚本 /usr/local/bin/mytask.sh

#!/bin/bash
echo "Task run at $(date)" >> /tmp/mytask.log

赋予执行权限:

chmod +x /usr/local/bin/mytask.sh

创建 service 文件:

sudo nano /etc/systemd/system/mytask.service

内容示例:

[Unit]
Description=My Task

[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh

⚠️ oneshot 表示一次性任务,对应 timer 的触发。


三、创建 timer 单元(定时规则)

sudo nano /etc/systemd/system/mytask.timer

示例 1:开机后 1 分钟执行一次

[Unit]
Description=Run mytask after boot

[Timer]
OnBootSec=1min
Unit=mytask.service

[Install]
WantedBy=timers.target

示例 2:每小时执行一次

[Timer]
OnCalendar=hourly
Persistent=true
Unit=mytask.service

示例 3:每天凌晨 2 点执行

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

四、启用并启动 timer(关键步骤 ✅)

sudo systemctl daemon-reload
sudo systemctl enable mytask.timer
sudo systemctl start mytask.timer

enable 的作用是:

  • 设置 开机自动启动
  • 下次系统重启后 timer 会自动生效

五、检查状态

查看 timer 是否已激活:

systemctl list-timers

查看指定 timer 状态:

systemctl status mytask.timer

六、常见问题

1️⃣ timer 启动但没执行?

journalctl -u mytask.service
journalctl -u mytask.timer

2️⃣ 需要 root 权限?

timer 和 service 放在 /etc/systemd/system/ 并以 root 启用即可。

3️⃣ 和 cron 的区别?

systemd timer cron
开机启动友好 需 crond
日志集成 journal 日志分散
支持依赖关系 不支持

七、简单总结(核心命令)

systemctl enable xxx.timer   # 开机启动
systemctl start xxx.timer    # 当前启动
systemctl status xxx.timer   # 查看状态

如果你愿意,可以把你的 具体脚本或需求 发给我,我可以帮你写一套完整的 .service + .timer 文件。

0