是否可以编写系统d服务,如:
[Service]
Type=forking
ExecStart=forksomething并在第一次调用仍在运行时允许第二个systemctl --user start forksomething.service?
我已经考虑过让它成为forksomething@.service,从"forksomething@$(date +'%s').service"开始,我只是希望得到一些不那么烦琐的东西。(编辑:实际上,这会更糟,因为它也必须创建符号链接和守护进程重新加载。)
发布于 2020-10-13 23:56:51
创建forksomething@.service并运行systemctl daemon-reload一次之后,systemd将准备好启动任意数量的forksomething@anything.service服务,而无需进一步重新加载守护进程。
实际上,您的forksomething@.service实际上是一个服务模板。可以将实例名称中的@之后的部分用作模板中的参数。例如,如果您像这样定义服务:
[Service]
Type=forking
ExecStart=/usr/local/bin/forksomething "%i"然后跑:
systemctl daemon-reload
systemctl start forksomething@1.service
systemctl start forksomething@2.service
systemctl start forksomething@3.service系统d将为您运行命令/usr/local/sbin/forksomething 1、/usr/local/sbin/forksomething 2和/usr/local/sbin/forksomething 3。
如果您希望从现在开始在每次引导时持续启动前两个实例,那么只需要说systemctl enable forksomething@1.service和systemctl enable forksomething@2.service。这些命令将自动创建指向适当/etc/systemd/system/<whatever>.target.wants/目录的适当符号链接。
仅通过尝试启动服务模板,就可以调用服务模板的实例;只有当您希望服务模板与某个目标单元持久关联时才需要符号链接(如果您希望在引导时启动某个对象,则通常是default.target或multi-user.target,但如果您想要与其他目标关联的实例,则可以在服务模板中指定Before=some.target )。
https://unix.stackexchange.com/questions/614400
复制相似问题