Я использую Ubuntu 14.04 и пытаюсь запустить
/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s S
и он возвращается
PROCS CRITICAL: 0 processes with command name 'rsyslogd', STATE = S | procs=0;1:3;1:5;0;
Так что я бегу с -vvv
и найди это check_procs
использует команду /bin/ps axwwo 'stat uid pid ppid vsz rss pcpu etime comm args'
перечислить процессы. Я нахожу свой процесс rsyslogd, и он отображается в следующем списке:
Ssl 101 406 1 256232 25392 0.0 157-05:57:14 rsyslogd rsyslogdproc#=0 uid=101 vsz=256232 rss=25392 pid=406 ppid=1 pcpu=0.00 stat=Ssl etime=157-05:57:14 prog=rsyslogd args=rsyslogd
В справке по команде написано:
-s, --state=STATUSFLAGS
Only scan for processes that have, in the output of `ps`, one or
more of the status flags you specify (for example R, Z, S, RS,
RSZDT, plus others based on the output of your 'ps' command).
Так что это действительно должно работать. Просто для тестирования пробовал запустить
/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s Ssl
Эта команда возвращает результат, который я ожидаю от первой команды:
PROCS OK: 1 process with command name 'rsyslogd', STATE = Ssl | procs=1;1:3;1:5;0;
check_procs - v1.5.
У меня есть та же тестовая команда, работающая на сервере RHEL 6.5, так что я думаю, это может быть специфическая для Ubuntu.
Глядя на исходный код check_procs, вы видите, что поведение, которое вы наблюдаете, является преднамеренным. Или, скорее, поведение полностью зависит от поведения ps
реализация. (Если это работает в вашей системе RHEL, это почти наверняка счастливое совпадение.)
Плагин должен использовать ps
(вместо того, чтобы копаться в / proc), чтобы он мог работать в системах без / proc (например, не в Linux).
После очистки ps
вывод, плагин вызывает strstr
чтобы увидеть, содержится ли состояние процесса в вашей командной строке arg to -s. Итак, в вашем примере он проверяет, является ли «Ssl» подстрокой «S».
Может показаться, что это обратная логика, например, что он должен проверять, является ли ваш аргумент «S» подстрокой «Ssl», но я считаю, что намерение состоит в том, чтобы вы предоставили несколько состояний процесса в качестве аргумента для -s.
Например, вы можете сделать это:
check_procs -C rsyslogd -w 1:3 -c 1:5 -s S,Ssl,Sl
PROCS OK: 1 process with command name 'rsyslogd', STATE = S,Ssl,Sl
Запятые просто делают его более читабельным; плагин их игнорирует.