2013-07-30 6 views
6

Ich debugge Monit Start/Stop-Programmanweisungen. In meiner /etc/monit.conf Datei, sieht meine start program Anweisung wie folgt:Monit entfernt Zitate von Start-Programm-Befehle

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

, die ich in einer Schale getestet habe mit

$ 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äuft diese wieder in der /tmp/monit.out Datei die korrekte Ausgabe:

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

Aber wenn ich sudo monit -v monitor node ausführen, zeigt es einen anderen Befehl , identische exce pt mit der inneren Apostrophe entfernt:

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 

ich nichts darüber in der monit Dokumentation finden. Die Dokumentation here scheint die ultimative Referenz zu sein, aber kurz vor dem Durchlaufen des Quellcodes, ich bin mir nicht sicher, was ich als nächstes tun soll.

Mein Befehl funktioniert perfekt, ohne die Anführungszeichen entfernt, so dass ich nur dieses Problem beheben muss. Alle Ideen und mögliche Korrekturen sind willkommen.

Antwort

2

Es ist eine ziemlich spät Antwort, doch ich es wichtig finden, da es einige Missverständnisse verursacht (so wurde ich misleaded)

Sie brauchen nicht ein einziges Anführungszeichen zu entkommen. Versuchen Sie es:

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

Es wird nicht als gestartete Prozess gezeigt, jedoch test_pid Datei erstellt wird. Fügen Sie ; sleep xx hinzu, um einen Prozess abzufangen und seine Eigenschaften zu untersuchen.

Das Problem kann durch ein env-spezifisches Problem verursacht werden.

0

Setzen Sie die Befehle bezüglich "start program" und "stop program" in ein Shell-Skript, machen Sie es ausführbar und geben Sie dann seine Adresse an monit.

auch, versuchen Sie es Apostroph zu entkommen Slash mit

\‘

(Ich habe nicht versucht, damit ich weiß nicht, ob es funktioniert).

+3

einzelnes Zitat Flucht funktioniert nicht – dubeegee