これは私のサービスファイルです。
[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 =で構成されている要件の依存関係とは無関係で直交です。