하나의 시스템 서비스가 완료 후 다른 시스템 서비스를 트리거하도록 만드는 방법은 무엇입니까?

하나의 시스템 서비스가 완료 후 다른 시스템 서비스를 트리거하도록 만드는 방법은 무엇입니까?

서로 다른 조건(Service1은 특정 TTY에서 실행해야 하고 service2는 해당 TTY에서 실행할 수 없음)에서 실행해야 하는 두 개의 프로세스가 있으므로 서로 다른 시스템 서비스에서 실행해야 합니다. 하지만 나는 그들이 연속해서 뛰기를 바랍니다. 따라서 타이머를 사용하여 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 위키는 certbot 업데이트 후 HTTP 서버 다시 로드를 트리거하기 위해 다음을 제안합니다.:

ExecStartPost=/bin/systemctl reload nginx.service

나는 이것이 "우아하다"고 말하지 않을 것이지만, 다음을 추가하면 service1.service원하는 대로 됩니다:

ExecStartPost=/bin/systemctl start service2.service

관련 정보