systemd start stopは、1つのターゲットデバイスを使用して複数のサービスを有効または無効にします。

systemd start stopは、1つのターゲットデバイスを使用して複数のサービスを有効または無効にします。

ターゲットファイル/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

その目的は、ターゲット/ etc / systemd / system /で指定されているすべてのsystemdテンプレートサービスを開始、停止、有効化、または無効にすることです。[Eメール保護]

[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時にコンピュータが自動的に起動し、サービスを停止するように設定します。 (コンピュータに同期が必要であるとマークされている場合は、3時頃に他のコンピュータと同期するcronjobがあります。コンピュータを使用していないときは自動的にシャットダウンします。同期が自動的に開始されます。)

私の問題は、私の目標を完全に達成できないことです。問題なくターゲットを起動または停止できます。これは、両方の「サブ」デバイスが実行中であることを意味します。有効にすると警告は表示されず、/etc/systemd/system/watch-for-sync-need-all.target.wantsディレクトリにそのリンクが作成されますが、マイコンピュータが起動したときに「sub」デバイスは実行されません。新しく起動すると、次の結果が表示されます。

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/[email protected]; disabled; vendor preset: enabled)
Active: inactive (dead)

システム起動時にsystemdにターゲット(すべての「サブ」デバイス)を起動させるにはどうすればよいですか?

答え1

/etc/systemd/system/watch-for-sync-need-all.targetのインストールセクションで、multi-user.targetをWantedByとして追加する必要がありました。このスタックオーバーフロースレッドで複数のexecStartでシステム化 Johnyのコメント5ではこれについて言及しています。

これがなぜ必要なのか理解できません。なぜなら、私が知っている限り、システムの起動時にアクティブ化を含むターゲットに対するすべての操作を説明する単位セクションで定義されているように、multi-user.targetの後にターゲットを起動する必要があるからです。

とにかく、この投稿と回答が役に立つことを願っています。

関連情報