2013-07-30 10 views
6

Sto eseguendo il debug delle istruzioni del programma start/stop. Nel mio file /etc/monit.conf, il mio start program dichiarazione simile a questa:monit rimuove le virgolette dai comandi del programma di avvio

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'"" 

che ho testato in un guscio con

$ 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 ' 

l'esecuzione di questo ritorna nel file /tmp/monit.out l'uscita corretta:

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

Ma quando corro sudo monit -v monitor node, visualizza un comando diverso , identico pt con le virgolette singole interne rimosso:

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 

Non riesco a trovare niente di questo nella documentazione Monit. La documentazione here sembra essere il riferimento finale ma, a meno di passare attraverso il codice sorgente, non sono sicuro di cosa fare dopo.

Il mio comando funziona perfettamente senza le virgolette rimosse, quindi ho solo bisogno di risolvere questo problema. Tutte le idee e le possibili correzioni sono benvenute.

risposta

2

E 'una risposta abbastanza tardi, tuttavia, trovo importante dal momento che provoca qualche incomprensione (così mi è stato misleaded)

Non è necessario per sfuggire un singolo carattere preventivo. Provalo:

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

Non sarà mostrato come un processo avviato, si crea comunque test_pid file. Aggiungi ; sleep xx per prendere un processo ed esaminarne le proprietà.

Il problema potrebbe essere causato da un problema env specifico.

0

Inserire i comandi relativi al "programma di avvio" e "programma di arresto" in uno script di shell, renderlo eseguibile e quindi fornire il proprio indirizzo a monit.

Inoltre, cercare di sfuggire apice singolo con barra

\'

(non ho provato in modo che io non so se funziona).

+3

escape singola virgola non funziona – dubeegee

Problemi correlati