Пользуюсь s6 (http://skarnet.org/software/s6/) для наблюдения за процессами.
У меня это хорошо работает для сотен процессов на десятках экземпляров докеров и серверов. У меня возникла новая проблема в стабильной системе.
Я настроил службу для ClamAV и в /etc/services.d/clamv/run начал процесс с:
exec s6-setuidgid clamav /opt/clamd
Он запускается, но у clam длинный цикл запуска, и примерно через одну минуту 20 секунд (предположительно, когда он завершает загрузку базы данных) запускается S6. другой экземпляр моллюска. Я могу увидеть их с помощью ps:
2286 clamav 0:00 /opt/clamd
5091 clamav 0:58 /opt/clamd
После завершения загрузки второй экземпляр пытается использовать сокет и вызывает ошибку:
Socket file /run/clamav/clamd.sock is in use by another process
Интересно, что при использовании ps aux столбец ВРЕМЯ для первого процесса увеличивается до 1:18, а затем возвращается к нулю - и второй экземпляр затем подсчитывает таким же образом.
Если я оставлю его запущенным, когда второй процесс завершит запуск, s6 будет пытаться запустить другой - хотя, что любопытно, никаких дополнительных процессов с использованием ps aux не появляется.
Я подтвердил, что clam создает файлы sock и pid только после долгого запуска.
Очевидный вопрос - как это исправить, чтобы s6 не запускал второй экземпляр в конце долгого запуска.
Ответ не имеет отношения к s6 - у меня был файл clamd.conf не в том месте, поэтому он собирал неправильные настройки. По умолчанию clamd запускается в фоновом режиме, поэтому s6 не смог контролировать процесс.
При запуске моллюска на переднем плане все работало как надо.