Агент Teamcity Build убит systemd при обновлении
В нашей системе centos мы настроили агента teamcity в качестве службы systemd. Служба работает нормально, кроме случаев, когда агент выполняет обновление. Затем он погибает при выполнении обновления. Я предполагаю, что это связано с тем, что systemd наблюдает за созданными процессами, и когда основной процесс существует, чтобы позволить второму процессу выполнить обновление, systemd решает, что это потерянный процесс, и убивает его примерно через минуту.
Я предполагаю, что это предположение подтверждается тем фактом, что при непосредственном запуске агента teamcity обновление работает без проблем.
Это конфигурация сервиса:
[Unit]
Description=teamcity agent - local
Requires=network.target
After=network.target
[Service]
Type=forking
PIDFile=/home/teamcityagent/logs/buildAgent.pid
WorkingDirectory=/home/teamcityagent
User=teamcityagent
Group=teamcityagent
ExecStart=/home/teamcityagent/bin/agent.sh start
ExecStop=/home/teamcityagent/bin/agent.sh stop
TimeoutStartSec=900
TimeoutStopSec=60
[Install]
WantedBy=multi-user.target
До сих пор я пытался изменить время ожидания до 900 секунд и закомментировал PIDFile. Ничего не помогло
Есть ли способ сказать systemd не убивать процесс обновления, сказав, чтобы он не наблюдал за потерянными процессами?
1 ответ
Добавление
RemainAfterExit=yes
к Service
Станса, кажется, исправляет это без необходимости изменять таймауты.
Задокументировано по адресу https://www.freedesktop.org/software/systemd/man/systemd.service.html
Прошло много времени с тех пор, как это было впервые опубликовано.
У меня была аналогичная проблема с последней версией TeamCity. В моем случае я настроил systemd для запуска агента от имени специального пользователя. Похоже, у этого пользователя нет необходимых разрешений для выполнения обновления.
Итак, когда агент остановлен, я перезапустил его вручную как root с помощью скриптов TeamCity. Обновление прошло успешно, и новый агент был запущен.
Однако в этот момент агент работал как root. Поэтому я остановил его вручную, сбросил разрешения в каталоге агента сборки для другого моего пользователя (после обновления некоторые файлы принадлежали root) и перезапустил с помощью systemctl. Это перезапустило агент как правильный пользователь.
Кажется, сейчас все работает.