Мы используем сервер 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]
блок в вашем файле Unit обрабатывается.
В этом случае вы дали указание systemd запустить службу в рамках достижения multi-user.target
.
Запуск enable
команды создаст символическую ссылку, /etc/systemd/system/multi-user.target.wants/
и наличие этой символической ссылки фактически укажет systemd
на необходимость запуска службы при загрузке.
Предлагаю превратить ваш комментарий о «странном поведении» в отдельный вопрос, где будет предоставлено больше подробностей, возможно, с подробностями из журнала systemd о том, что происходит. (проверьте journalctl
вывод).