monit удаляет кавычки из команд запуска программы

Я отлаживаю операторы программы запуска / остановки монитора. В моем /etc/monit.conf файле мой start program оператор выглядит так:

check process node with pidfile /home/ec2-user/blah/node.pid
    start program = "/bin/su -c 'export APP_ENV=development; /home/ec2-user/local/bin/node /home/ec2-user/example.com/current/api.js start &> /tmp/monit.out ' "
    stop program = "/bin/su -c '/home/ec2-user/local/bin/node /home/ec2-user/example.com/current/api.js stop'""

который я тестировал в оболочке с

$ sudo su
# env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh
# /bin/su -c '/usr/bin/env APP_ENV=development; /home/ec2-user/local/bin/node /home/ec2-user/example.com/current/api.js start &> /tmp/monit.out '

выполнение этого возвращает в /tmp/monit.out файл правильный вывод:

Starting nodejs daemon...
nodejs daemon started. PID: 16408

Но когда я запускаю sudo monit -v monitor node, он отображает другую команду, идентичную, за исключением того, что внутренние одинарные кавычки удалены:

The service list contains the following entries:

Process Name          = node
 Pid file             = /home/ec2-user/blah/node.pid
 Monitoring mode      = active
 Start program        = '/bin/su -c export APP_ENV=development; /home/ec2-user/local/bin/node /home/ec2-user/example.com/current/api.js start &> /tmp/monit.out ' timeout 30 second(s)
 Stop program         = '/bin/su -c /home/ec2-user/local/bin/node /home/ec2-user/example.com/current/api.js stop' timeout 30 second(s)
 Existence            = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
 Pid                  = if changed 1 times within 1 cycle(s) then alert
 Ppid                 = if changed 1 times within 1 cycle(s) then alert

System Name           = system_ip-xx-xx-xx-xx.ec2.internal
 Monitoring mode      = active

Я ничего не могу найти по этому поводу в документации по монитору. Документация, здесь, кажется окончательной справкой, но не содержит исходного кода. , Я не уверен, что делать дальше.

Моя команда отлично работает без удаления кавычек, поэтому мне просто нужно исправить эту проблему. Все идеи и возможные исправления приветствуются.


person dubeegee    schedule 30.07.2013    source источник


Ответы (2)


Это довольно поздний ответ, тем не менее, я считаю его важным, поскольку он вызывает некоторое недоразумение (поэтому я был введен в заблуждение)

Вам не нужно экранировать символ одиночной кавычки. Попробуй:

check process fake_proc
  with pidfile /tmp/test_pid
  start = "/bin/bash -c 'echo $$ > /tmp/test_pid'"
  stop = "echo stop > /tmp/test_pid"

Он не будет отображаться как запущенный процесс, однако создается test_pid файл. Добавьте ; sleep xx, чтобы поймать процесс и изучить его свойства.

Проблема может быть вызвана какой-либо проблемой, связанной с env.

person Vladimir Chervanev    schedule 30.01.2015

Поместите команды, касающиеся «запуска программы» и «остановки программы», в сценарий оболочки, сделайте его исполняемым и затем дайте его адрес для мониторинга.

также попробуйте избежать его одинарной кавычки, используя косую черту

\'

(я не пробовал, поэтому не знаю, работает ли).

person kevoroid    schedule 30.07.2013