systemd“oneshot”服务触发关机

systemd“oneshot”服务触发关机

Type=oneshot显示触发系统断电的systemd服务。例如,这可以用于,以避免出现sigpwr.target问题sigpwr.target从工作模式开始replace-irreversible

确保 oneshot 服务在完成之前不会被终止,因为这会导致显示失败。

  1. 是否存在可能的顺序,让 systemd 在完成之前停止或终止您的服务?如果有的话,会产生什么影响?
  2. 如果可以的话,你们的服务也能正常工作吗?从工作模式开始replace-irreversible

答案1

# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff

DefaultDependencies=no避免隐式Conflicts=shutdown.target.这意味着服务是否以作业模式启动并不重要replace-irreversible。它还避免了隐式的Wants=sysinit.target;例如,如果您想在转换到emergency.target.

Before=shutdown.target确保服务在 systemd-shutdown 开始发送信号之前完成。如果不出意外的话,这使得该单元的正确性分析变得更简单。我们通过确保服务不会等待断电完成来避免死锁。

systemd-shutdown如果用 SIGTERM 杀死 systemctl 进程也没关系。该过程将简单地以 statusWIFSIGNAL和 a WTERMSIGof终止SIGTERM。 Systemd 将此视为干净、成功的退出。请参阅 中 SuccessExitStatus 的定义man systemd.exec。但是,如果内核神秘地没有在 systemd 之前安排此初始退出DEFAULT_TIMEOUT_USEC,则 systemd-shutdown 将发送不可阻止的信号 SIGKILL。 Systemd 不会将此视为成功退出。

相关内容