![休眠时未运行时的自定义命令](https://linux22.com/image/192797/%E4%BC%91%E7%9C%A0%E6%97%B6%E6%9C%AA%E8%BF%90%E8%A1%8C%E6%97%B6%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4.png)
我需要在 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
完成这些步骤后,将在休眠之前执行自定义脚本。