Runlevel

啟用單元失敗:文件 log.service:沒有這樣的文件或目錄

  • March 24, 2018

我想在關機或關機前記錄一些東西。

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 無法執行?

您不應該在目錄中創建單元,該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=依賴項。依賴關係在關閉時以相反的順序工作,因此請在該子句中列出您依賴的那些(例如, ) 。該指令也可能很有趣,因為您需要為 log.sh 安裝文件系統才能執行…local-fs.target``network.target``After=``RequiresMountsFor=

引用自:https://unix.stackexchange.com/questions/433201