서로 다른 조건(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