В нашей системе песней мы настроили 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
До сих пор я попытался изменить тайм-аут на 900secs и прокомментировал PIDFile. Ничто не помогло.
Существует ли способ сказать systemd не уничтожать процесс обновления, говоря этому не наблюдать за потерянными процессами?
Добавление
RemainAfterExit=yes
в службу
строфа, кажется, исправляет это без необходимости изменять тайм-ауты.
Документировано на https://www.freedesktop.org/software/systemd/man/systemd.service.html#RemainAfterExit=
Прошло много времени с тех пор, как это было впервые опубликовано.
У меня только что была похожая проблема с последней версией TeamCity. В моем случае я настроил systemd для запуска агента от имени специального пользователя. Похоже, у этого пользователя нет необходимых разрешений для выполнения обновления.
Поэтому, когда агент был остановлен, я перезапустил его вручную с правами root с помощью скриптов TeamCity. Обновление прошло успешно, и новый агент был запущен.
Однако на тот момент агент работал от имени пользователя root. Поэтому я остановил его вручную, сбросил права доступа в каталоге агента сборки другому моему пользователю (после обновления некоторые файлы принадлежали root) и перезапустил с помощью systemctl. Это перезапустило агент как надлежащего пользователя.
Кажется, теперь все работает.