休眠时未运行时的自定义命令

休眠时未运行时的自定义命令

我需要在 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/ 但问题是相同的。

答案1

问题是 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

完成这些步骤后,将在休眠之前执行自定义脚本。

相关内容