monit removes quotes from start program commands
amazon-ec2, bash, linux, monit
Solution
It's a quite late answer, nevertheless I find it important since it causes some misunderstanding (so I was misleaded)
You don't need to escape a single quote character. Try it:
check process fake_proc
with pidfile /tmp/test_pid
start = "/bin/bash -c 'echo $$ > /tmp/test_pid'"
stop = "echo stop > /tmp/test_pid"
It will not shown as a started process, however `test_pid` file is created. Add `; sleep xx` to catch a process and examine its properties.
The problem might be caused by a some env-specific issue.
Problem
I am debugging monit start/stop program statements. In my `/etc/monit.conf` file, my `start program` statement looks like this: ``` 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'"" ``` which I've tested in a shell with ``` $ 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 ' ``` running this returns in the `/tmp/monit.out` file the correct output: ``` Starting nodejs daemon... nodejs daemon started. PID: 16408 ``` But when I run `sudo monit -v monitor node`, it displays a different command, identical except with the inner single quotes removed: ``` 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 ``` I can't find anything about this in the monit documentation. The documentation here seems to be the ultimate reference but short of going through the source code, I'm not sure what to do next. My command works perfectly without the quotes removed, so I just need to fix this issue. All ideas and possible fixes welcome.