crower: (Crower)
[personal profile] crower
Хочешь сделать хорошо — делай всё сам. ;)
Казалось бы куда проще — проверяй существующий пид-файл, чекай активный процесс и давай инфо можно запускать демона или нет. Хрен там. Proc::Daemon — какое-то примитивное поделие, если не сказать УГ. Если один демон запущен, то пид-файл с ним никак не связан и очень легко можно переписать пидфайл пидом нового демона. И всё — старого демона «потеряли».

И это при том, что перед использованием "стандартного" Proc::Daemon сделал всё-то же скриптом. Единственно что не получалось красиво — форкнуть процесс. Зато логи писались где надо и как надо. Нет, представляете? После того как я пустил демона из под /etc/init.d/ у меня логи пропали! Права? Дык робот-то запускается из-под рута! Руту не дают рутовых прав? Проверять надо. Или не проверять, а просто сделать всё самому от начала до конца.

Чтобы проверить: по найденому пиду работает правильный демон или тот уже умер, пидфайл «осиротел» и с этим пидом работает другой процесс - использовал Procecc::ProcessTable, перебирал пиды пока не находил свой, чекал cmdnline и сравнивал с ожидаемым. Но, ёлки-зелёные, нафига? Можно ведь сразу проверять наличие /proc/$pid и там cmdline! Небольшой нюанс с именем запущенного файла ("/usr/bin/perl ./file" или "/usr/bin/perl /path/file"), пожалуй, следует решать путём абсолютизации имени файла. Т.е. интерпретатор скипаем, а имя файла... В голову приходит только одна идея: сам запускаемый скрипт должен вычислять своё абсолютное имя и где-нибудь его писать. Хорошо бы в таком-же стиле как /proc/$pid/absname, чтобы можно было его чекать. Хм. А почему бы не поюзать тот же /run/$name/$name.name? А это мысль! Надо будет именно так и сделать. :)

Profile

crower: (Default)
crower

February 2018

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728   

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 27th, 2026 10:33 pm
Powered by Dreamwidth Studios