Hi,

I have the following check to monitor if all ntp servers configured are
alive

*check program ntpq*
*  with path /bin/bash -c '/usr/bin/ntpq -4pn |tail -n +3 |awk '"'"'{ print
$3 }'"'"' |grep -q 16'*
*  if status = 0 then alert*

I'm using a shell quote escaping extensively to have ' and " in parallel.

Short explanation of multiple single and double quotes:
with path /bin/bash -c '/usr/bin/ntpq -4pn |tail -n +3 |awk '"'"'{ print $3
}'"'"' |grep -q 16'
                                                            ^^^^^
 ^^^^^
                                                            01234
 56789
0. ' - end   first  quotation which uses single quotes
1. " - start second quotation using double quotes
2. ' - quoted character itself
3. " - end   second quotation using double quotes
4. ' - start third  quotation using single quotes
5. ' - end   third  quotation using single quotes
6. " - start fourth quotation using double quotes
7. ' - quoted character itself
8. " - end   fourth quotation using double quotes
9. ' - start fifth  quotation using single quotes
In fact, shell interprets all above as long concatenated string.

When I run this command in shell all is fine and works as expected - no
output and status code is 1.

When the same check is run by monit, I have the following output:
*# monit status ntpq*
*Monit 5.25.1 uptime: 39d 23h 12m*

*Program 'ntpq'*
*  status                       OK*
*  monitoring status            Monitored*
*  monitoring mode              active*
*  on reboot                    start*
*  last exit value              1*
*  last output                  Usage: awk [POSIX or GNU style options] -f
progfile [--] file ...*
*                               Usage: awk [POSIX or GNU style options]
[--] 'program' file ...*
*                               POSIX options: GNU long options: (standard)*
*                                -f progfile --file=progfile*
*                                -F fs --field-separator=fs*
*                                -v var=val --assign=var=val*
*                               Short options: GNU long options:
(extensions)*
*                                -b --characters-as-bytes*
*                                -c --traditional*
*                                -C --copyright*
*                                -d[file] --dump-variables[=file]*
*                                -D[file] --debug[=file]*
*                                -e 'program-text' --source='program-text'*
*                                -E file --exec=file*
*                                -g --gen-pot*
*                                -h --help*
*                                -i includefile --include=includefile*
*                                -l library --load=library*
*                                -L[fatal|invalid] --lint[=fatal|invalid]*
*                                -M --bignum*
*                                -N --use-lc-numeric*
*                                -n --non-decimal-data*
*                                -o[file] --pretty-print[=file]*
*                                -O --optimize*
*                                -p[file]*
*  data collected               Mon, 05 Feb 2018 17:05:56*


I've also tried to quote all expression with double quotes which makes it
even less readable :) with the same result.

Any suggestions on what went wrong would be highly appreciated.
Thanks in advance.

-- 
Vladimir "vovin" Scherbinin.
-- 
To unsubscribe:
https://lists.nongnu.org/mailman/listinfo/monit-general

Reply via email to