小编joo*_*nir的帖子

Systemd:等待端口打开以启动服务或声明服务已启动

我有一些服务(A、B、C)需要另一个服务(activemq)处于“活动”状态,并且在启动它们之前让所有必需的端口侦听连接。服务B和C依赖于A,而A又依赖于activemq及其监听的端口(特别是61616端口)。

我遇到的问题是,在 activemq 完成打开所有端口之前,systemd 将 activemq 服务标记为“活动”。所以我的服务 (A) 启动然后终止。

我尝试过的:

set: Restart=on-success (或始终)它有效,但我需要为所有服务( ABC )执行此操作。我不想应用这种规则。

它的工作原理是在服务 A 中添加:

ExecStartPre=/bin/sleep 30 
Run Code Online (Sandbox Code Playgroud)

然后服务 A 正确启动,因此 B 和 C 无需任何进一步配置(除了为所有服务设置的相应“After=”和“Requires=”之外:A、B 和 C)。但我认为这不是一个正确/干净的解决方案。

我还尝试了 [Service] 中的其他选项,但没有任何效果,例如 Type=fork 等

我想要的是:

  • 告诉 systemd 仅在所有端口(其中有四个)或至少最后一个端口(这是导致问题的端口)侦听时才将 activemq 服务标记为“活动”:61616 或
  • 仅在端口 61616 监听后启动服务 A(某种 Require=tcp/61616 或类似的东西)

activemq.service 文件是:

[Unit]
Description=Activemq Servoce
After=local-fs.target                                                                                                                                                                      
After=network.target                                                                                                                                                                       

[Service]                                                                                                                                                                                  
Type=simple                                                                                                                                                                                
SuccessExitStatus=0 143                                                                                                                                                                    
ExecStart=/usr/bin/activemq console                                                                                                                                                        
User=activemq                                                                                                                                                                              
Group=activemq                                                                                                                                                                             
Restart=always
PrivateTmp=true

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

systemd

4
推荐指数
1
解决办法
8560
查看次数

标签 统计

systemd ×1