systemd start stop 使用一個目標單元啟用和禁用多個服務
我創建了一個目標文件 /etc/systemd/system/watch-for-sync-need-all.target
[Unit] Description=systemd target to group services for all folders that create a sync need by changes After=multi-user.target Wants=watch-for-sync-need@_sl_home_sl_.service Wants=watch-for-sync-need@_sl_stream_sl_.service [Install] Also=watch-for-sync-need@_sl_home_sl_.service Also=watch-for-sync-need@_sl_stream_sl_.service
其目的是能夠啟動、停止、啟用或禁用所有在目標指定的systemd模板服務/etc/systemd/system/watch-for-sync-need@.service
[Unit] Description=watch sync folders for changes then flag sync need and set rtcwake BindsTo=watch-for-sync-need-all.target After=watch-for-sync-need-all.target [Service] User=root Group=root Type=simple ExecStart=/bin/bash /etc/custom/notify-on-change %i Restart=on-failure RestartSec=3 [Install] WantedBy=watch-for-sync-need-all.target
如果它必須處理我的問題,我會發布 /etc/custom/notify-on-change 的呼叫腳本內容
#! /usr/bin/env bash inotifywait -q -m -r -e modify,delete,create "${1//_sl_//}" | while read DIRECTORY EVENT FILE do echo "yes" > /etc/custom/log/sync-needed bash /etc/custom/set-rtcwake systemctl stop watch-for-sync-need-all.target done
如果文件夾 /home/ 或 /stream/ 發生更改,inotifywait 會注意到,標記同步需求,在即將到來的晚上 3 點設置電腦自我喚醒並停止服務。(如果標記了同步需要,則機器上有一個 cronjob 會在 3 點鐘後的幾分鐘內同步到另一台電腦。電腦在不使用時會自行關閉。這樣,我可以在我的電腦上工作並製作/home/ 或 /stream/ 中的更改,然後並且只有在那時才會自動開始同步。)
我的問題是,我無法充分啟用我的目標。可以毫無問題地啟動或停止目標。這意味著,兩個“子”單元都在執行。啟用不會發出任何警告並在目錄 /etc/systemd/system/watch-for-sync-need-all.target.wants 中創建相應的連結,但是當我的機器啟動時,“子”單元沒有執行。新啟動後,我得到以下輸出
systemctl status watch-for-sync-need-all.target watch-for-sync-need-all.target - systemd target to group services for all folders that create a sync need by ch> Loaded: loaded (/etc/systemd/system/watch-for-sync-need-all.target; indirect; vendor preset: enabled) Active: inactive (dead)`enter code here`
或者
systemctl status watch-for-sync-need@_sl_home_sl.service watch-for-sync-need@_sl_home_sl.service - watch sync folders for changes then flag sync need and set rtcwake Loaded: loaded (/etc/systemd/system/watch-for-sync-need@.service; disabled; vendor preset: enabled) Active: inactive (dead)
如何讓 systemd 在系統啟動時啟動目標(所有“子”單元)?
在 /etc/systemd/system/watch-for-sync-need-all.target 的安裝部分中,multi-user.target 必須添加為 WantedBy,現在它可以工作了。在這個堆棧溢出執行緒Systemd with multiple execStart comment 5 by Johny 中提到了這一點。
我不明白,為什麼需要這樣做,因為目標應該在 multi-user.target 之後啟動,就像 Unit-section 中定義的那樣,據我所知,unit-section 考慮了它的所有操作,包括啟用在系統啟動時。
無論如何,我希望這個執行緒和答案有所幫助。