Linux
After= 選項在 systemd 服務文件中不起作用
我有兩個 shell 腳本名稱 first.sh 和 second.sh。first.sh 和 second.sh 的內容如下:
>>first.sh #!/bin/bash while true do echo The current time is $(date) sleep(1) done >>second.sh #!/bin/bash while true do echo The current time from second script is $(date) sleep(1) done
同樣,first.service的內容是:
[Unit] Description=first service After=second.service [Service] ExecStart=/home/abanstola/first.sh
second.service 的內容是:
[Unit] Description=Second service [Service] ExecStart=/home/abanstola/second.sh
請注意
After=second.service
first.service 程式碼中的 。根據文件,在第二個服務啟動之前,第一個服務不應該執行。但即使我禁用或停止第二個服務,第一個服務執行沒有任何問題。我在這裡做錯了什麼?
您誤讀了文件。報價:
如果單元
foo.service
包含設置Before=bar.service
並且兩個單元都正在啟動,bar.service
則啟動將延遲到foo.service
完成啟動。After=
是 Before= 的倒數由我突出顯示。這僅在兩個單元都被啟動時才有效。如果禁用其中之一,則無效。
目前還不清楚你真正想要什麼。
可能更好的選擇是:
類似於
Wants=
,但聲明了更強的需求依賴。這種類型的依賴關係也可以通過將符號連結添加到.requires/
單元文件隨附的目錄來配置。如果該單位被啟動,列出的單位也將被啟動。如果其他單元之一未能啟動,並且
After=
設置了對失敗單元的排序依賴性,則該單元將不會啟動。此外,無論是否指定After=
,如果其他單元之一被顯式停止,則該單元將被停止。配置與 類似的依賴
Requires=
項,但僅限於停止和重新啟動單元。當 systemd 停止或重新啟動此處列出的單元時,該操作將傳播到該單元。請注意,這是一種單向依賴——對此單元的更改不會影響列出的單元。