为什么从 systemd 挂起唤醒时我的脚本没有执行?

为什么从 systemd 挂起唤醒时我的脚本没有执行?

下列的https://wiki.archlinux.org/index.php/Power_management#Hooks_in_/usr/lib/systemd/system-sleep,我添加一个 shell 脚本作为具有执行权限的 systemd sleep 挂钩(我手动创建,/usr/lib/systemd/system-sleep/默认情况下不存在):

$ ls /usr/lib/systemd/system-sleep/ -l
total 4
-rwxr-xr-x 1 root root 322 Dec  2 19:28 systemd_suspend_cpu_freq.sh

其内容是

#!/bin/sh

case "$1/$2" in
    post/*)
    echo "systemd_suspend hook" >>/tmp/mylog
    ;;
esac

我首先暂停我的 Lubuntu 18.04,方法是

$ systemctl suspend 
User testme is logged in on seat0.
User testme is logged in on sshd.
User testme is logged in on seat0.
User testme is logged in on seat0.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl suspend -i'.
$ systemctl suspend  -i
$

然后我唤醒它,我没有找到任何/tmp/mylog应​​该由我的脚本编写的内容,而且

$ journalctl -b -u systemd-suspend.service

-- Logs begin at Mon 2018-11-12 13:25:27 EST, end at Sun 2018-12-02 19:30:04 EST. --
Dec 02 18:38:05 ocean systemd[1]: Starting Suspend...
Dec 02 18:38:05 ocean systemd-sleep[17888]: Suspending system...
Dec 02 18:51:16 ocean systemd[1]: Started Suspend.
Dec 02 19:29:30 ocean systemd[1]: Starting Suspend...
Dec 02 19:29:30 ocean systemd-sleep[20436]: Suspending system...
Dec 02 19:29:42 ocean systemd-sleep[20436]: /dev/sda:
Dec 02 19:29:42 ocean systemd-sleep[20436]:  setting Advanced Power Management level to 0xfe (254)
Dec 02 19:29:42 ocean systemd-sleep[20436]:  APM_level        = 254
Dec 02 19:29:35 ocean systemd-sleep[20436]: System resumed.
Dec 02 19:29:42 ocean systemd[1]: Started Suspend.

我想知道为什么我的脚本从挂起唤醒时没有执行?

谢谢。


更新

评论中的以下建议不会使钩子在唤醒时执行:

  • mkdir /home/t/tmpdir; chmod 777 /home/t/tmpdir
  • 重定向到/home/t/tmpdir/mylog 脚本中(在 下没有创建文件/home/t/tmpdir/

答案1

我遇到了同样的错误。这拱门 Linux 维基目前关于放置脚本的位置不正确。您需要将脚本放入/lib/systemd/system-sleep/而不是/usr/lib/systemd/system-sleep/.

也可以看看man systemd-suspend.service

在进入系统挂起和/或休眠之前,systemd-suspend.service(以及其他提到的单元)将运行 /lib/systemd/system-sleep/ 中的所有可执行文件,并向它们传递两个参数。

相关内容