我们正在使用 Bamboo 服务器与正在构建我们的项目的远程代理持续集成。这些代理可以使用简单的 shell 脚本启动(效果很好)。但我想我会进一步移动它并使其成为systemd
一个单元,这将使代理在启动后自动启动,并且允许人们通过systemctl
命令启动/停止它。这就是我尝试过的
[Unit]
Description=Atlassian Bamboo Agent
After=syslog.target network.target
[Service]
Type=forking
User=shub
Group=shub
ExecStart=/home/shub/bamboo-agent-home/bin/bamboo-agent.sh start
ExecStop=/home/shub/bamboo-agent-home/bin/bamboo-agent.sh stop
[Install]
WantedBy=multi-user.target
比我做过的还要多systemctl daemon-reload
。问题是代理在重新启动后没有启动,而且它的行为很奇怪(在某种程度上服务会不时重新启动或在之后无法正常启动systemctl start
)。那么我做错了什么?我考虑过更改Type
为,simple
但我希望代理作为后台服务运行(并且脚本本身在执行后在后台运行代理)。
答案1
你问了多个问题。我将回答这个问题:“为什么我的自定义 systemd 服务没有在启动时启动?”
答案是因为你还没有已启用它。当您运行时systemctl enable my-service-name
,[Install]
单元文件中的块将被执行。
在这种情况下,您已指示 systemd 在到达multi-user.target
.
运行enable
命令将创建一个符号链接,/etc/systemd/system/multi-user.target.wants/
并且该符号链接的存在将实际指示systemd
在引导时启动服务。
我建议将您的“行为怪异”评论变成一个单独的问题,其中提供了更多详细信息,也许包含来自 systemd 日志的有关正在发生的事情的详细信息。 (检查journalctl
输出)。