我有两个进程需要在不同的条件下运行(Service1 必须从特定的 TTY 运行,而 service2 不能在该 TTY 下运行。),因此它们必须从不同的 systemd 服务运行。但我希望他们背靠背跑。所以我想用计时器触发service1,但然后我希望在service1之后立即触发service2。
有没有一种优雅的方式来实现这一目标?
服务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
源systemd单元手册: 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