After= 選項在 systemd 服務檔案中不起作用

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第一個服務代碼中的 。根據文檔,在第二個服務啟動之前,第一個服務不應運行。但即使我禁用或停止第二個服務,第一個服務運行也沒有任何問題。我在這裡做錯了什麼?

答案1

您誤讀了文件。引用

如果單位foo.service包含設定Before=bar.service 兩個裝置均已啟動,bar.service的啟動被延遲到foo.service完成啟動。After=是 Before= 的倒數

由我突出顯示。這僅在兩個單元都啟動時才有效。如果停用其中之一,則不會產生任何效果。

目前還不太清楚你真正想要什麼。

可能更好的選擇是:

Requires=

與 類似Wants=,但聲明了更強的需求依賴性。這種類型的依賴關係也可以透過將符號連結新增至.requires/單元檔案附帶的目錄來配置。

如果該單位被激活,列出的單位也將被激活。如果其他單元之一無法激活,並且After=設定了對失敗單元的排序依賴性,則該單元將不會啟動。此外,無論是否指定After=,如果其他單元之一明確停止,則該單元將停止。

PartOf=

配置類似於 的依賴關係Requires=,但僅限於停止和重新啟動單元。當 systemd 停止或重新啟動此處列出的單元時,操作將傳播到該單元。請注意,這是單向依賴關係 - 對此單位的變更不會影響列出的單位。

相關內容