我正在调试monit启动/停止程序语句.在我的/etc/monit.conf文件中,我的启动程序语句如下所示:
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'""
我在shell中测试过
$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节点时,它会显示一个不同的命令,除了内部单引号被删除之外:
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 alertSystem name = system_ip-xx-xx-xx-xx.ec2.internal Monitoring mode = active
我在monit文档中找不到任何相关内容.文档here似乎是最终的参考,但没有通过源代码,我不知道下一步该怎么做.
我的命令工作完美,没有删除引号,所以我只需要解决这个问题.欢迎所有想法和可能的修复.
最佳答案这是一个相当晚的答案,但我觉得它很重要,因为它会引起一些误解(所以我误导了)您不需要转义单引号字符.试试吧:
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文件.添加;睡眠xx以捕获进程并检查其属性.
问题可能是由某个特定环境问题引起的.
总结以上是内存溢出为你收集整理的linux – monit从启动程序命令中删除引号全部内容,希望文章能够帮你解决linux – monit从启动程序命令中删除引号所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)