systemd-run --on-calendar ....
我已经使用“现在我已将其替换为正确的.timer
文件”创建了一个 systemd 作业.service
,但我无法删除旧的作业。我可以停止它并禁用它,但是当我调用它时systemctl list-timers
,它仍然会以其任意名称出现run-r0d0dc22...
。我也找过它的.timer
文件,但没有找到。
答案1
临时文件最终会出现/run/user/
,并且似乎永远不会被删除,直到用户注销(for )或重新启动(重新创建)systemd-run --user
为止。/run
例如,如果您创建一个仅在给定时间运行一次的命令:
systemd-run --user --on-calendar '2017-08-12 14:46' /bin/bash -c 'echo done >/tmp/done'
您将在以下位置获得您拥有的文件/run
:
/run/user/1000/systemd/user/run-28810.service
/run/user/1000/systemd/user/run-28810.service.d/50-Description.conf
/run/user/1000/systemd/user/run-28810.service.d/50-ExecStart.conf
/run/user/1000/systemd/user/run-28810.timer
/run/user/1000/systemd/user/run-28810.timer.d/50-Description.conf
/run/user/1000/systemd/user/run-28810.timer.d/50-OnCalendar.conf
对于非--user
文件位于/run/systemd/system/
您可以删除文件,执行 a systemctl [--user] daemon-reload
,然后list-timers
将仅显示单元名称以及它们的最后历史记录(如果它们已经运行)。此信息可能保存在 systemd 的内部状态或日志文件中。
答案2
接受的答案(删除文件并执行 a daemon-reload
)对我来说不起作用 - 相反,我能够使用systemd --user stop unitfile
;删除计时器。然而,这可能有所不同,因为我已经使用了单元文件。
因为我的问题“Systemd as at
replacement”已被标记为“完全相同”,所以我将删除它并发布以下内容。
我想使用 systemd 之类的at
。我创建了一个单元文件,在其中运行 shell 脚本(传递“%I”),但在安排它时遇到问题。如果我使用它,它也会使计时器保持活动状态以便明天运行,而不是在运行后将其删除。~/.config/systemd/user/[email protected]
systemd-run --user --unit say@'test message' --on-calendar='13:54'
我应该如何指示 systemd 在今天的特定时间运行一个单元文件一次?我想要一个能够自动清理瞬态计时器的解决方案,这样我就不必systemd --user stop say@'test message'
事后清理。
答:我必须指定完整的日期。所以 - ... --on-calendar='2018-04-16 13:54:00'
。这似乎也能正确地自行清理。
答案3
我必须做
systemctl --user stop Remove_Me.{service,timer}
使用 systemd 版本 245 删除瞬态计时器单元。
该{service,timer}
部分是 Bash 功能:大括号扩展
伊里丹的回答跑步systemctl --user stop Remove_Me
对我来说不起作用,我得到了这个:
警告:正在停止Remove_Me.service,但仍可以通过以下方式激活它:Remove_Me.timer
并且该单位仍然出现systemctl --user list-timers *Remove*
。
阅读喵的回答,我在 中找到了 .timer 和 .service 文件/run/user/1000/systemd/transient/
。删除文件并执行操作后,的输出中systemctl --user daemon-reload
仍然有Remove_Me.timer
(但没有) 。Remove_Me.service
systemctl --user list-timers
我通过读取单位摆脱了那个挥之不去的计时器
systemd-run --user --on-calendar=2025-01-01 -u "Remove_Me" touch ~/test_file
然后将其删除
systemctl --user stop Remove_Me.{service,timer}
现在,systemctl --user list-timers *Remove*
不显示任何单位。