Wir verwenden den Bamboo-Server für die kontinuierliche Integration mit Remote-Agenten, die unsere Projekte erstellen. Diese Agenten können mit einem einfachen Shell-Skript gestartet werden (was gut funktioniert). Aber ich dachte, ich gehe noch einen Schritt weiter und mache eine systemd
Einheit daraus, die den Agenten nach dem Booten automatisch startet und es den Benutzern ermöglicht, ihn über systemctl
Befehle zu starten/stoppen. Das habe ich also versucht
[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
Das habe ich getan systemctl daemon-reload
. Das Problem ist, dass der Agent nach dem Neustart nicht gestartet wird und sich außerdem seltsam verhält (in der Weise, dass der Dienst sich von Zeit zu Zeit neu startet oder danach nicht richtig hochfährt systemctl start
). Was mache ich also falsch? Ich habe darüber nachgedacht, den Agenten so zu ändern, dass Type
er simple
als Hintergrunddienst ausgeführt wird (und das Skript selbst den Agenten nach der Ausführung im Hintergrund ausführt).
Antwort1
Sie haben mehrere Fragen gestellt. Ich beantworte die Frage: „Warum startet mein benutzerdefinierter systemd-Dienst nicht beim Booten?“
Die Antwort ist, weil Sie nichtermöglichtes. Wenn Sie ausführen systemctl enable my-service-name
, [Install]
wird der Block in Ihrer Unit-Datei bearbeitet.
In diesem Fall haben Sie systemd angewiesen, den Dienst als Teil der Erreichung des zu starten multi-user.target
.
Durch Ausführen enable
des Befehls wird ein symbolischer Link erstellt /etc/systemd/system/multi-user.target.wants/
und die Anwesenheit dieses symbolischen Links weist systemd
den Dienst beim Booten an, diesen zu starten.
Ich schlage vor, Ihren Kommentar „verhält sich komisch“ in eine separate Frage umzuwandeln, in der mehr Einzelheiten bereitgestellt werden, möglicherweise mit Details aus dem Systemd-Journal darüber, was vor sich geht. (Überprüfen Sie journalctl
die Ausgabe.)