Настройка простого сервиса с помощью systemd

Настройка простого сервиса с помощью systemd

Мы используем сервер 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вывод).

Связанный контент