私たちは、プロジェクトを構築しているリモートエージェントとの継続的な統合のためにBambooサーバーを使用しています。これらのエージェントは、簡単なシェルスクリプトで起動できます(問題なく動作します)。しかし、私はそれをさらに進めて、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
出力を確認してください)