恢复后启动 systemd 服务不起作用

恢复后启动 systemd 服务不起作用

我正在尝试让服务在系统恢复时自行重启。这是我的文件.service

[Unit]
Description=Set the battery charge threshold
After=multi-user.target
After=sleep.target
StartLimitBurst=0

[Service]
Type=oneshot
Restart=on-failure
ExecStart=/bin/bash -c 'echo 60 > /sys/class/power_supply/BAT1/charge_control_end_threshold'

[Install]
WantedBy=multi-user.target
WantedBy=sleep.target

我已经设定WantedByAfter希望sleep.target这项服务能够在sleep.target。但是,服务是在进入睡眠状态之前启动的,而不是在恢复时启动的。这是一个已知错误吗?还是我做错了什么?

我还希望它在从挂起(即休眠)恢复后运行。但是 suspend.target 会引入 sleep.target,因此修复此问题应该允许它在从挂起恢复时运行。

我知道存在类似的问题,但是那里的解决方案都不起作用(特别是设置WantedByAfter)。

PS:请不要建议使用放置在特定文件夹中的 bash 脚本。这些脚本对于我的用例来说似乎太笨重了,我首先想要一个更简单的解决方案。

答案1

也许你需要这样的东西:

[Unit]
Description=Set the battery charge threshold
PartOf=sleep.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/bin/bash -c 'echo 60 > /sys/class/power_supply/BAT1/charge_control_end_threshold'

[Install]
WantedBy=sleep.target

答案2

我已将 WantedBy 和 After 设置为 sleep.target,希望此服务在 sleep.target 运行后运行。然而,服务是在进入睡眠状态之前启动的,而不是在恢复时启动的。

这是正常的,因为实际上没有订购任何东西“sleep.target”。所有实际触发内核电源操作的内置服务(例如“systemd-suspend.service”)都只有After=sleep.target,因此它们与您的服务并行运行。

实际的“sleep.target”默认不执行任何操作,并且不参与实际使系统进入睡眠状态;这是由特定的“hibernate.target”和“suspend.target”单元完成的。

您需要在这两个目标之后直接挂接您的服务,或者相应的“systemd-hibernate.service”和“systemd-suspend.service”。

相关内容