異なる条件(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