我有一个应用程序,我想在启动时编译一次,如果成功,则运行它。我有两项服务:compile-app
和run-app
。当我使用它设置它时,Requires
它可以工作,但每当我这样做时,systemctl restart run-app
它也会重新运行compile-app
,这是我不想要的。
如何重组我的服务,使其compile-app
在手动重新启动时不运行run-app
?
# compile-app.service
[Unit]
Description=compile app
After=network-online.target syslog.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=some command
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
和
# run-app.service
[Unit]
Description=run app
After=network-online.target syslog.target
Wants=network-online.target
Requires=compile-app.service
[Service]
Type=simple
ExecStart=some command
[Install]
WantedBy=multi-user.target
EOF
就是我现在所拥有的。
答案1
RemainAfterExit=true
应该已经成功了。您确定compile-app.service
当您停止/重新启动另一个单元时,它真的停止/重新启动吗?
您还应该添加compile-app.service
到After
of run-app.service
。现在的情况是,两个服务之间没有顺序关系,所以它们会并行启动。请记住,这Wants/Requires/Conflicts
并不意味着任何顺序,同样,Before/After
也不意味着任何依赖性。