Bash
休眠未執行時的自定義命令
我需要在 Debian Buster 休眠之前執行自定義命令。文件說將腳本放置到目錄 /etc/pm/sleep.d。我創建以下腳本:
#!/bin/sh echo "`date` script started" >> scriptStarted.txt case "$1" in hibernate|suspend) /home/<user-name>/scripts/killProcess.sh ;; thaw|resume) ;; *) exit $NA ;; esac
問題是腳本沒有執行。
我也試過目錄 /usr/lib/pm-utils/sleep.d/ 但問題是一樣的。
問題是 Debian Buster 使用 systemd,而不是 pm。
當我將腳本放入 /lib/systemd/system-sleep 時,它是在系統掛起之前執行的。
#!/bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin case "$1" in pre) echo "`date` pre suspending executed" >> /home/<user-name>/scripts/execution.log #code execution BEFORE sleeping/hibernating/suspending ;; post) #code execution AFTER resuming ;; esac exit 0
但是,在休眠的情況下,此解決方案仍然無效。系統休眠時腳本未執行。
最後我創建了一個自定義服務。我將文件 my-hibernate.service 放到 /usr/lib/systemd/system 中:
[Unit] Description=Some description Before=hibernate.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=/home/<user-name>/scripts/my-script.sh [Install] WantedBy=hibernate.target
接下來,我啟用了該服務:
sudo systemctl enable my-hibernate.service
在這些步驟之後,自定義腳本在休眠之前執行。