Linux

Systemd:如何僅在關機時執行腳本(而不是在重新啟動時)

  • June 9, 2020

這裡有很多解決方案可以在關機/重啟時執行腳本,但我希望我的腳本只在關機時執行。

我嘗試將我的腳本放在 /usr/lib/systemd/systemd-shutdown 中,並檢查 $1 參數,如此處所示但它不起作用。

有任何想法嗎 ?

系統:帶有gnome-shell的archlinux

$systemctl --version                                                                                                                                                                                 
systemd 229
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN

我終於找到瞭如何做到這一點。

這有點駭人聽聞的想法,但它確實有效。

我已經使用了這個執行緒的一部分:https ://stackoverflow.com/questions/25166085/how-can-a-systemd-controlled-service-distinguish-between-shutdown-and-reboot

和這個執行緒: 如何在關機前使用 systemd 執行腳本?

我已經創建了這個服務/etc/systemd/system/shutdown_screen.service

[Unit]
Description=runs only upon shutdown
Conflicts=reboot.target
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/bin/bash /usr/local/bin/shutdown_screen
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

這將在 shudown/reboot/halt/whatever 處執行。(不要忘記啟用它)

在我的腳本中,/usr/local/bin/shutdown_screen 我輸入了以下內容:

#!/bin/bash
# send a shutdown message only at shutdown (not at reboot)    
/usr/bin/systemctl list-jobs | egrep -q 'reboot.target.*start' || echo "shutdown" | nc 192.168.0.180 4243 -w 1

這將向我的 arduino 發送關閉消息,後者將關閉我的螢幕。

引用自:https://unix.stackexchange.com/questions/284598