On Wed, May 07, 2014 at 11:00:41PM +0700, Denis G. Samsonenko wrote: > День добрый! > > Разбираясь с ddclient обнаружил, что не отрабатывает останов сервиса. > Процесс продолжает работать после останова. Соответственно повторный > запуск запускает ещё один процесс. То же самое происходит при рестарте > сервиса. > > Покопавшись в /rc.d/init.d/ddclientd и /rc.d/init.d/functions понял, > что start-stop-daemon не находит процесс ddclient. > > $ ps ax |grep ddclient > 8562 ? S 0:00 ddclient - sleeping for 30 seconds > > $ cat /proc/8562/cmdline > ddclient - sleeping for 30 seconds > > $ cat /proc/8562/stat > 8562 (ddclient - slee) S 1 8481 8481 0 -1 1077944384 999 3150 0 0 2 0 > 0 1 20 0 1 0 5329363 30277632 1811 18446744073709551615 4194304 > 4198956 140736794566528 140736794565432 140013415770624 0 0 128 16385 > 18446744071579414165 0 0 17 2 0 0 0 0 0 6299072 6299804 6303744 > 140736794570065 140736794570112 140736794570112 140736794570725 0 > > На сколько я понял, start-stop-daemon сверяет заданное имя процесса с > тем, что находит в /proc/[pid]/stat, а там оно оказывается таким: > "ddclient - slee". > > Ручной запуск start-stop-daemon с параметром --name "ddclient - slee" > отрабатывает нормально: > > # start-stop-daemon --stop --test --name "ddclient - slee" --pidfile > /var/run/ddclient/ddclient.pid > Would send signal 15 to 8562. > > > Если же запустить с --name ddclient, то отработает с ошибкой: > > # start-stop-daemon --stop --test --name ddclient --pidfile > /var/run/ddclient/ddclient.pid > No ddclient found running; none killed. > > > Попытка подсунуть --name "ddclient - slee" в /rc.d/init.d/ddclientd не > приводит к успеху. По видимому где-то по дороге к вызову > start-stop-daemon теряются кавычки. Пытался по всякому их вкладывать и > экранировать -- не помогло. > > Можно как-нибудь с этим справиться? Не используйте --name, идентификация по /proc//exe гораздо надежнее. -- ldv