Systemd service | Как обновлять файл демона, без необходимости останавливать процесс? К примеру, есть вот такой service файл:[Unit]
Description=App name
After=syslog.target
[Service]
WorkingDirectory=/home/user/app
ExecStart=/home/user/app/app
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=app-name
User=user
Group=user
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
Исполняемый файл: /home/user/app/app
Сейчас система не разрешит перезаписать файл, пока процесс запущен.
Нужно делать systemctl stop, systemctl start.
Возможно сделать конфигурацию, которая позволит заменять исполняемый файл и потом делать systemctl restart?

21 Авг 2019 в 06:53
187 +1
0
Ответы
1

Да, можно настроить возможность обновления файла демона без остановки процесса. Для этого можно использовать параметр systemd ExecReload, который позволяет перезапустить сервис для применения изменений в конфигурации или конфигурационных файлах.

Для вашего случая, можно добавить параметр ExecReload в секцию [Service] вашего systemd service файла, например:

[Service]
WorkingDirectory=/home/user/app
ExecStart=/home/user/app/app
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=app-name
User=user
Group=user
LimitNOFILE=infinity

Когда вы захотите обновить файл исполняемого демона, просто замените файл /home/user/app/app новой версией и выполните команду systemctl reload [название вашего сервиса], это приведет к перезапуску демона с новым исполняемым файлом.

Обратите внимание, что не все приложения поддерживают перезапуск через сигнал HUP, поэтому вам может потребоваться использовать другой метод обновления, например, создавать скрипт, который останавливает процесс, заменяет файл и запускает процесс заново.

20 Апр 2024 в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир