我們正在使用 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
輸出)。