Bug 29894

Summary: Ошибка открытия сокета при запуске службы
Product: Sisyphus Reporter: Andrey Cherepanov <cas>
Component: squidmillAssignee: manowar <manowar>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: manowar, mike
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://forum.altlinux.org/index.php/topic,31761.0.html

Description Andrey Cherepanov 2014-03-19 12:03:27 MSK
После падения сервера служба squidmill не поднялась:
*** Log started
Process detached (11794)
PID-file: /var/run/squidmill/squidmill.pid
Open server socket: /var/run/squidmill/squidmill.sock
Delete the PID-file: /var/run/squidmill/squidmill.pid
Socket error (98): Address already in use
0  main                    
1  ##execute-program       
*** Log finished

Помогло только удаление файла /var/run/squidmill/squidmill.sock
Comment 1 manowar@altlinux.org 2014-03-19 13:12:54 MSK
  А это точно ошибка? Кажется, при экстренном падении, нельзя гарантировать удаление файла. Обычно выводится сообщение, что, мол, проверьте всё и удалите lock-файл или socket для нормального запуска службы.
Comment 2 Andrey Cherepanov 2014-03-19 13:36:24 MSK
(В ответ на комментарий №1)
>   А это точно ошибка? Кажется, при экстренном падении, нельзя гарантировать
> удаление файла. Обычно выводится сообщение, что, мол, проверьте всё и удалите
> lock-файл или socket для нормального запуска службы.
Прошлый раз также бились с pid-файлом. Что мешает с сокетом поступить также (принудительно удалять, как pid-файл в логе)?
Comment 3 manowar@altlinux.org 2014-03-19 13:55:49 MSK
В логе выше удаляется *новый* PID-файл, который создаётся в рамках попытки запуска службы двумя строками выше. Видимо, служба падает таким образом, что старый PID-файл успевает удалиться, а сокет — нет. Соответственно, squidmill думает, что кто-то запустил другой экземпляр из командной строки (в foreground, поэтому без PID), и не стартует.

Я бы предложил разобраться не с тем, что нужно чистить "ошмётки" от падения службы вручную — это нормальная ситуация —, а с тем, почему squidmill вообще падает, если это происходит регулярно.
Comment 4 Andrey Cherepanov 2014-03-19 14:41:22 MSK
Снапшот виртуалки сделал, так что всегда можно вернутся. Но всё же 
а) лучше возвращать код ошибки, чтобы service не показывал, что служба запущена
б) лучше критические ошиьбки выводить сразу в stderr, тогда понятно почему служба не стартует (как в httpd2 и dhcpd)
в) ещё лучше при старте явно чистить все сокеты и pid во избежание.
Comment 5 manowar@altlinux.org 2014-03-19 14:48:02 MSK
  а) и б) согласен: нужно проверять всё это до форка.