Bash

休眠未執行時的自定義命令

  • July 12, 2021

我需要在 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

在這些步驟之後,自定義腳本在休眠之前執行。

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