起動時にsystemdスクリプトの実行を遅らせることはできますか?

起動時にsystemdスクリプトの実行を遅らせることはできますか?

systemd起動時に実行したい2つのスクリプトがあります。

  1. 最初のシステムスクリプトはOpenVPNを起動し、接続されたIPをファイルに書き込むシェルスクリプトを実行しますvpn.env

  2. 2番目のシステムスクリプトはTransmissionを開始し、TransmissionのIPアドレスにバインドする必要がありますvpn.env

私の問題は、2番目のシステムスクリプトがあまりにも「高速」で実行され、OpenVPNが起動して書き込み前に完了することですvpn.env

質問:2番目のスクリプトに遅延(おそらく数秒)を追加し、環境ファイルが記録されるのを待つ方法はありますか?


システム化されたOpenVPNスクリプト

[Unit]
Description=VPN Custom Launch Connection
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn --config /etc/openvpn/vpn.conf

[Install]
WantedBy=multi-user.target

プログラムの起動時に実行されるOpenVPN .shスクリプト

printenv > /etc/openvpn/vpn.env

システム転送スクリプト

[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target vpn.service
Requires=vpn.service

[Service]
User=transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --config-dir /opt/transmission --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

ベストアンサー1

問題はType=simpleVPNサービスの説明にあります。これアーチスウィキ明確にするマニュアルページ、少し:

Type=simple(デフォルト):systemdサービスがすぐに開始されることを考慮します。プロセスは分岐してはいけません。このサービスに対して別のサービスを注文する必要がある場合は、ソケットがアクティブでない限り、このタイプを使用しないでください。

タイプを変更すると、これを達成できます。

Type=oneshot:これは、単一のジョブを実行して終了するスクリプトに役立ちます。あなた可能また、プロセスが終了した後もサービスがアクティブであると見なされるようにRemainAfterExit=yes設定しようとします。systemd

おすすめ記事