我想在关机或断电之前记录一些内容。
uname -a
Linux xxx 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux
systemctl get-default
graphical.target
runlevel
N 5
编辑我的脚本。
sudo vim /etc/systemd/system/graphical.target.wants/log.service
[Unit]
Description=Run command at shutdown
Before=shutdown.target reboot.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh
启用它。
sudo systemctl enable log.service
Failed to enable unit: File log.service: No such file or directory
如何修复它?下面的设置有什么问题吗?
sudo cat /etc/systemd/system/log.service
[Unit]
Description=Run command at shutdown
After=shutdown.target reboot.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh
[Install]
WantedBy=graphical.target
启用它sudo systemctl enable log.service
没有任何问题。
为什么没有日志信息,/home/log.sh
无法执行?
答案1
您不应该在该graphical.target.wants
目录中创建单元,该目录用于符号链接。相反,直接在目录中创建它/etc/systemd/system
。
此外,您还需要一个部分来描述使用[Install]
该命令时将其安装在何处。 systemctl enable
(在您的情况下,您可以使用graphical.target
,尽管multi-user.target
这是一个更常见的选择,并且它是 的依赖项graphical.target
,因此它将在启动期间被拉出。)
因此,在以下位置创建它/etc/systemd/system/log.service
:
[Unit]
Description=...
[Service]
...
ExecStop=/bin/bash /home/log.sh
[Install]
WantedBy=multi-user.target
然后使用以下命令启用它:
$ sudo systemctl enable log.service
那么这应该可以工作。
您的依赖关系可能不正确。您有Before=shutdown.target reboot.target
,但很可能您需要使用After=
需要运行的服务的依赖项前他们被阻止了。依赖项在关闭时以相反的顺序工作,因此请在该子句中列出您所依赖的项(例如local-fs.target
, )。该指令可能也很有趣,因为您需要安装 log.sh 才能运行的文件系统......network.target
After=
RequiresMountsFor=