无法启用单元:文件 log.service:没有这样的文件或目录

无法启用单元:文件 log.service:没有这样的文件或目录

我想在关机或断电之前记录一些内容。

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.targetAfter=RequiresMountsFor=

相关内容