例如,如果我有两个服务文件以type=forking
启动两个不同的 java 应用程序的方式运行,然后有两个服务文件以 type=simple 的方式运行不同的应用程序,那么有没有办法运行另一个服务文件来启动/停止其他四个服务文件,但其他四个仍然可以独立使用?
例如:
dataingest-type1.service
dataingest-type2.service
different-dataingest.type3.service
different-dataingest.type4.service
所有服务均作为 systemd 下的独立服务正常运行。
诸如此类的服务可以dataingest.service
启动/停止其他四个吗?
此外,如果其他服务之一发生故障并且dataingest.service
再次运行,它应该重新启动该服务。(基本上,我尝试制作一个运行的脚本systemctl start <list of services>
并将其设置为服务,但是如果其中一个服务停止并且服务启动再次运行,它不会运行该脚本,因为它认为该服务正在运行。)
因此dataingest.service
看起来像这样:
[Unit]
Description=Stuff blah blah
Requires=network.target
After=network.target
[Service]
Type=oneshot
ExecStart=/path/to/little/script.sh start
ExecStop=/path/to/little/script.sh stop
RemainAfterExit=true
[install]
WantedBy=multi-user.target
bash 脚本只完成一项工作!
#/bin/bash
/bin/systemctl $1 dataingest-type1.service dataingest-type2.service different-dataingest.type3.service different-dataingest.type4.service
显然如果有更好的方法......
答案1
答案2
因此,使用@Mark 提供的链接,我可以确定需要做什么。
主服务 dataingest.service 需要作为一个目标,因此重命名为 dataingest.target dataingest.target 单元具有以下内容:
[Unit]
Description=Data Ingest Services
Requires=network.target
After=network.target
Wants=dataingest-type1.service dataingest-type2.service different-dataingest.type3.service different-dataingest.type4.service
[Install]
WantedBy=multi-user.target
然后各个服务都有类似以下内容的内容:
[Unit]
Description=type x data ingest service
PartOf=dataingest.target
[Service]
Type=......
etc
etc
etc
[Install]
WantedBy=dataingest.target
然后 systemctl enable dataingest..... 然后重新加载。
现在可以单独启动服务,也可以仅使用目标文件启动。sudo systemctl start dataingest.target
此外,如果其中一项服务发生故障,目标单元将启动单独的服务。
谢谢@mark