В ОС FreeBSD иногда появляется проблема, когда rcNG-скрипт запускает процесс
(процесс запускается нормально, pid-файл создается, с правами все в порядке),
но не хочет его останавливать. Например, SpamAssassin:
# /usr/local/etc/rc.d/sa-spamd start
Starting spamd.
# ls -l /var/run/spamd/spamd.pid
-rw-r--r-- 1 root spamd 6 1 авг 08:37 spamd.pid
# /usr/local/etc/rc.d/sa-spamd stop
spamd not running? (check /var/run/spamd/spamd.pid)
Причина проблемы не очевидна, решение находится из man ps:
если длина аргументов больше значения переменной ядра kern.
ps_arg_cache_limit, то ps показывает не полную строку запуска процесса,
а лишь само имя процесса в квадратных скобках. И бывают случаи (как в SpamAssassin),
когда имя процесса не совпадает с именем в rcNG-скрипте (переменная name).
Поэтому rcNG-скрипт не обнаруживает запущенного ним процесса в выводе ps.
Решение - увеличить значение переменной ядра kern.ps_arg_cache_limit в sysctl.conf.
Замечание:
Если в rc.conf в spamd_flags присутствует --debug, то rcNG-скрипт работать не будет,
потому что в этом случае вывод ps axww меняется.
Например вместо:
68514 ?? Ss 0:11,27 /usr/local/bin/spamd --siteconfigpath=/usr/local/etc/mail/spamassassin
-x -d -l --max-conn-per-child=128 --timeout-tcp=10 --timeout-child=300
--pidfile=/var/run/spamd/spamd.pid --syslog=local0 --username=spamd --groupname=spamd
--allowed-ips=127.0.0.0/8 --listen-ip=127.0.0.1 -d -r /var/run/spamd/spamd.pid (perl5.8.8)
получаем
68514 ?? Ss 0:11,27 /usr/local/bin/perl -T -w /usr/local/bin/spamd
--siteconfigpath=/usr/local/etc/mail/spamassassin -x -d -l --max-conn-per-child=128
--timeout-tcp=10 --timeout-child=300 --pidfile=/var/run/spamd/spamd.pid --syslog=local0
--username=spamd --groupname=spamd --allowed-ips=127.0.0.0/8 --listen-ip=127.0.0.1 --debug
received-header -d -r /var/run/spamd/spamd.pid
Решение этой проблемы - правка rc.subr, что есть дело нелегкое. И проще помнить про этот нюанс.
|