Systemd requireBy ディレクティブは無視されました。

Systemd requireBy ディレクティブは無視されました。

これは私のサービスファイルです。

[Unit]
Description=Blabla service
Requires=network-online.target nfs-common.service
After=network-online.target nfs-common.service

[Service]
Type=oneshot
ExecStart=/path/to/script
RemainAfterExit=no

[Install]
RequiredBy=php5-fpm.service apache2.service nginx.service

アクティブになると有望に見えます。

# systemctl enable blabla.service 
Created symlink from /etc/systemd/system/php5-fpm.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/apache2.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/nginx.service.requires/blabla.service to /etc/systemd/system/blabla.service.

その後、再起動後にsystemd-analyze次の情報を提供します。

# systemd-analyze blame
         18.434s blabla.service
          5.942s cloud-init.service
          2.766s networking.service
          1.671s apache2.service
          1.398s cloud-init-local.service
          1.276s newrelic-sysmond.service
           856ms php5-fpm.service
           586ms nginx.service
           .....

文書によるとType=oneshot

oneshotは単に動作しますが、systemdが後続のユニットを起動する前にプロセスを終了する必要があります。

どんなアイデアがありますか?

ベストアンサー1

RequiredBy=これは、あるサービスが別のサービスを開始する必要があるという意味ではありません。

のマニュアルにはman systemd.unit次のようにRequiredBy=記載されています。

主な結果は、リストされたデバイスが起動すると現在のデバイスが起動することです。

つまり、並列に開始できます。Before=インストールセクションにディレクティブがなければならないと思います。の文書にはman systemd.unit次の内容がありますBefore=

foo.serviceデバイスにBefore = bar.service設定が含まれていて、両方のデバイスが起動している場合、foo.serviceが起動するまでbar.serviceの起動が遅れます。この設定は、Requires =で構成されている要件の依存関係とは無関係で直交です。

おすすめ記事