如何构建多实例systemd服务配置?

sor*_*rin 5 systemd

我正在尝试将 systemd 配置为能够执行同一服务的多个实例,但似乎我做错了什么,并且文档资源似乎不太清楚。

\n\n

已创建/lib/systemd/system/confluence@.service文件包含以下内容:

\n\n
[Unit]\nDescription=Confluence %i\nAfter=postgresql.service nginx.service\n\n[Service]\nType=forking\nExecStart=/opt/atlassian/confluence-%i/bin/start-confluence.sh\nExecStartPre=/opt/atlassian/confluence-%i/bin/setenv.sh prestart\n\nExecStop=/opt/atlassian/confluence-%i/bin/stop-confluence.sh\n\nTimeoutStopSec=5min\nPIDFile=/opt/atlassian/confluence-%i/work/catalina.pid\n\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n\n

到目前为止,一切顺利,systemctl enable confluence.test报告的成功(是的,/opt/atlassian/confluence-test/“恰好”包含了它所需要的内容。

\n\n

不过,当我尝试使用启动服务时systemctl start confluence我得到:

\n\n
root@atlas:/lib/systemd/system# systemctl start confluence@test.service\nJob for confluence@test.service failed. See "systemctl status confluence@test.service" and "journalctl -xe" for details.\nroot@atlas:/lib/systemd/system# systemctl status confluence@test.service\n\xe2\x97\x8f confluence@test.service - Confluence test\n   Loaded: loaded (/lib/systemd/system/confluence@.service; enabled; vendor preset: enabled)\n   Active: failed (Result: exit-code) since Fri 2015-10-09 13:25:28 BST; 7s ago\n  Process: 16352 ExecStartPre=/opt/atlassian/confluence-%i/bin/setenv.sh prestart (code=exited, status=203/EXEC)\n\nOct 09 13:25:28 atlas systemd[1]: Starting Confluence test...\nOct 09 13:25:28 atlas systemd[1]: confluence@test.service: control process exited, code=exited status=203\nOct 09 13:25:28 atlas systemd[1]: Failed to start Confluence test.\nOct 09 13:25:28 atlas systemd[1]: Unit confluence@test.service entered failed state.\nOct 09 13:25:28 atlas systemd[1]: confluence@test.service failed.\n
Run Code Online (Sandbox Code Playgroud)\n\n

不知何故,systemd 似乎没有扩展应该是实例名称的“%i”。

\n

Thi*_*vel -1

您不能为每个实例使用单独的启动/停止脚本。

我会建议ExecStart=/opt/atlassian/confluence/bin/start-confluence.sh

每次调用时都会启动一个新实例。

同样适用于ExecStartPreExecStop

  • 根据我从同事那里收到的反馈,我认为这并不正确。他告诉我,只有命令的第一个参数不支持变量扩展,这意味着使用 /bin/bash 或 /bin/sh 应该是实现此目的的替代方法。无论如何,我需要更多时间才能找到生成新实例的可靠方法。 (2认同)