背景
我正在編寫一個簡單的腳本,要在 Raspberry Pi 2 上的 Raspbain 中運行,只需打開 LED 即可表明我已準備好從桌上型電腦連接 SSH。
腳本在這裡並不重要,只需提及,由於我使用頻率控制,因此腳本正在運行無限循環,以頻繁地打開和關閉 LED。這是一個簡單服務的例子。不過,至少這個問題的接受答案建議我將類型設為空閒。所以我的服務文件看起來像
[Unit]
Description=Turn on LED after SSH is ready
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
Wants=network-online.target
After=network-online.target
影響
該服務按預期運作。然而,我注意到當我在桌上型電腦上啟動 putty 時,LED 亮起後,登入提示不會立即出現。所以我檢查了
$ systemd-analyze plot > output.svg
結果顯示
問題
看來我的服務不是在 之後啟動的network-online.target
,這裡出了什麼問題,我該如何修復它?
答案1
當對 systemd 指令有疑問時,您可以使用 來man systemd.directives
尋找它的記錄位置。在本例中,它顯示After=
記錄在man systemd.unit
.
在該檔案中,它顯示該After=
指令列在「[UNIT] SECTION OPTIONS」中,表示它屬於[Unit]
該檔案的部分。
同一文件也記錄了 [INSTALL] 部分選項,但After=
此處未列出。
簡而言之,您的After=
指令位於單元檔案的錯誤位置,因此在您將其移動到正確的位置之前它不會生效。
答案2
透過將服務修改為來修復它
[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
WantedBy=network-online.target
仍然不完全理解我在做什麼,但現在它可以工作了。誰能解釋一下嗎?
更新
這個答案是在接受的答案出現之前由我自己創造的。