1つのシステムサービスが完了した後に別のシステムサービスを起動させる方法は何ですか?

1つのシステムサービスが完了した後に別のシステムサービスを起動させる方法は何ですか?

異なる条件(Service1は特定のTTYで実行する必要があり、service2はそのTTYでは実行できません)で実行する必要がある2つのプロセスがあるため、異なるシステムサービスで実行する必要があります。しかし、私は彼らが連続してプレーすることを願っています。したがって、タイマーを使用してservice1をトリガーし、service2はservice1の直後にトリガーされることを望みます。

これを達成するためのエレガントな方法はありますか?

サービス1

[Unit]
Description=blank the cursor

[Service]
StandardInput=tty-force 
StandardOutput=tty 
TTYPath=/dev/tty1 
Type=simple 
ExecStart=tput civis > /dev/tty1

サービス2

[Unit]
Description=random wallpaper change script

[Service]
SyslogIdentifier=wallpaper.sh
User=deanresin
Type=simple 
ExecStart=/bin/bash /home/deanresin/scripts/wallpaper.sh

service1が完了した後、service2をトリガーしたいと思います。

答え1

Service1 の完了後、Service2 がトリガされます。

service1でこの関係を実装するか、service2でこの関係を実装できます。

サービス1で実装

[Unit]
Before=service2.service
Wants=service2.service # Start service2 after this service

service2で実装

[Unit]
After=service1.service
BindsTo=service1.service # Only starts if service1 exits with success

[Install]
WantedBy=service1.service # Creates a Wants dependency in service1

ソースシステムデバイスマニュアル: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

答え2

Arch Linux Wikiは、certbotの更新後にHTTPサーバーの再ロードをトリガーするために、以下を提案します。:

ExecStartPost=/bin/systemctl reload nginx.service

私はこれが「エレガントだ」とは言わないでしょうが、次のように追加するとservice1.service好きなようになります:

ExecStartPost=/bin/systemctl start service2.service

関連情報