Raspberry PI / systemd:在关机/关机时运行脚本,但在重启时不运行

Raspberry PI / systemd:在关机/关机时运行脚本,但在重启时不运行

在 Raspberry PI(运行 raspbian)上,我需要运行脚本关闭/关机, 但不重启

我的第一次尝试是定义如下服务:

[Unit]
Description=Power off service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/local/bin/poweroff.sh

[Install]
WantedBy=multi-user.target

这有效,但脚本在重启时也在运行。因此我尝试将其安装到不同的目标:

[Install]
WantedBy=shutdown.target halt.target

但是经过这样的改变之后,脚本根本无法运行。

定义关机时应执行的操作的正确方法是什么?

答案1

从我在网上收集到的信息来看,最好的选择是Conflicts=reboot.target在单元文件([Unit]部分)中,然后在脚本中执行以下操作:

systemctl list-jobs | egrep -q 'reboot.target.*start'

如果reboot.target计划启动,则重新启动。否则,不会重新启动。如果命令“成功”,则系统正在重新启动。否则,系统正在关闭。您可以像这样使用它:

if ! systemctl list-jobs | egrep -q 'reboot.target.*start'; then
  echo Shutting down
fi

答案2

Daniel 的回答解决了问题中的问题。但它仍然不是我真正需要的:脚本调用得太早,我需要它尽可能晚地执行(脚本实际上使用连接到 RPi 引脚的继电器关闭电源GPIO

投入更多时间之后,我找到了更简单的解决方案,它完全满足了我的需求:

  1. /etc/systemd/system/systemd-poweroff.service.d如果目录尚不存在,则创建目录
  2. poweroff.conf在目录中创建一个新文件/etc/systemd/system/systemd-poweroff.service.d
[Service]
ExecStartPre=/usr/local/bin/poweroff.sh

采用这种方法,无需添加新服务

相关内容