
我有兩個 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= 的倒數
由我突出顯示。這僅在兩個單元都啟動時才有效。如果停用其中之一,則不會產生任何效果。
目前還不太清楚你真正想要什麼。
可能更好的選擇是:
與 類似
Wants=
,但聲明了更強的需求依賴性。這種類型的依賴關係也可以透過將符號連結新增至.requires/
單元檔案附帶的目錄來配置。如果該單位被激活,列出的單位也將被激活。如果其他單元之一無法激活,並且
After=
設定了對失敗單元的排序依賴性,則該單元將不會啟動。此外,無論是否指定After=
,如果其他單元之一明確停止,則該單元將停止。
配置類似於 的依賴關係
Requires=
,但僅限於停止和重新啟動單元。當 systemd 停止或重新啟動此處列出的單元時,操作將傳播到該單元。請注意,這是單向依賴關係 - 對此單位的變更不會影響列出的單位。