删除使用“systemd-run --on-calendar”创建的计时器

删除使用“systemd-run --on-calendar”创建的计时器

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 atreplacement”已被标记为“完全相同”,所以我将删除它并发布以下内容。

我想使用 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.servicesystemctl --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*不显示任何单位。

相关内容