You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用systemd在指定时间停止任务?

如何使用systemd在指定时间停止任务?

嘿,我看到你遇到的问题了——想让systemd管理的音频服务在指定时间自动停止,但现在的服务配置写法有几个问题导致它不生效,我来帮你梳理清楚并给出可行的解决方案~

先说说你当前配置的问题

你把at命令直接塞在ExecStart里用&&连接,这会导致两个核心问题:

  1. &&表示只有前面的audio.sh执行完成后,才会运行后面的at命令。但你的服务设置了Restart=always,说明audio.sh是持续运行的脚本,那后面的at任务永远没机会被提交。
  2. at的用法不对:at需要通过标准输入接收要执行的命令,而不是直接把命令当作参数跟在后面。

解决方案一:修正at命令的写法

我们需要调整ExecStart的写法,让audio.sh后台运行的同时,给at正确提交停止任务。修改你的audio.service里的ExecStart字段:

[Service]
Restart=always
ExecStart=/bin/bash -c "/home/suomi/scripts/audio.sh & echo 'pkill pulseaudio && systemctl stop audio.service' | /usr/bin/at 15:26"
User=suomi
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/suomi/.Xauthority

这里的关键细节:

  • 用bash -c包裹整段命令,实现多命令的连续执行
  • 给audio.sh加上&让它后台运行,这样at任务能立刻被提交,不用等脚本执行完毕
  • 通过echo把停止命令传给at的标准输入,让at正确识别并存储任务

解决方案二:用systemd定时器(更推荐)

如果不想依赖atd服务,用systemd原生的定时器会更可靠,也更符合systemd的管理逻辑。步骤如下:

  1. 修改原audio.service:去掉里面和at相关的部分,恢复成单纯启动脚本的配置:
[Unit]
Description=Audio service
After=multi-user.target

[Service]
Restart=always
ExecStart=/bin/bash /home/suomi/scripts/audio.sh
User=suomi
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/suomi/.Xauthority

[Install]
WantedBy=multi-user.target
  1. 创建停止服务单元audio-stop.service:这个单元专门负责执行停止命令:
[Unit]
Description=Stop audio service

[Service]
Type=oneshot
ExecStart=/bin/bash -c "pkill pulseaudio && systemctl stop audio.service"
User=suomi
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/suomi/.Xauthority
  1. 创建定时器单元audio.timer:用来指定触发停止服务的时间:
[Unit]
Description=Timer to stop audio service at specified time

[Timer]
# 指定每天15:26执行,格式遵循systemd日历规范
OnCalendar=*-*-* 15:26:00
# 如果系统在指定时间没运行,不要补执行
Persistent=false
# 指定要触发的停止服务
Unit=audio-stop.service

[Install]
WantedBy=timers.target
  1. 启用并启动定时器:
sudo systemctl daemon-reload
sudo systemctl enable --now audio.timer

这种方法的好处是:不依赖第三方服务,systemd会自己管理定时器的生命周期,你还能通过systemctl list-timers查看定时器状态,排查问题更直观。

备注:内容来源于stack exchange,提问作者user1734160

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:44:06