2013-07-30 23 views
6

Tôi đang gỡ lỗi các câu lệnh chương trình bắt đầu/dừng chương trình. Trong tập tin /etc/monit.conf tôi, tuyên bố start program của tôi trông như thế này:monit xóa dấu ngoặc kép khỏi các lệnh chương trình bắt đầu

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

mà tôi đã thử nghiệm trong một vỏ với

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

chạy này trả về trong file /tmp/monit.out đầu ra chính xác:

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

Nhưng khi tôi chạy sudo monit -v monitor node, nó sẽ hiển thị một lệnh khác nhau, giống hệt exce pt với dấu ngoặc đơn bên trong bị xóa:

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 

Tôi không thể tìm thấy bất kỳ điều gì trong tài liệu này. Tài liệu hướng dẫn here dường như là tài liệu tham khảo cuối cùng nhưng thiếu thông qua mã nguồn, tôi không chắc phải làm gì tiếp theo.

Lệnh của tôi hoạt động hoàn hảo mà không có dấu ngoặc kép bị xóa, vì vậy tôi chỉ cần khắc phục sự cố này. Tất cả các ý tưởng và sửa lỗi có thể được chào đón.

Trả lời

2

Đó là một câu trả lời khá muộn, tuy nhiên tôi thấy nó quan trọng vì nó gây ra một số hiểu lầm (vì vậy tôi đã misleaded)

Bạn không cần phải thoát khỏi một nhân vật dấu nháy đơn. Hãy thử nó:

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

Nó sẽ không được hiển thị như một quá trình bắt đầu, tuy nhiên test_pid tập tin được tạo ra. Thêm ; sleep xx để bắt một quy trình và kiểm tra các thuộc tính của nó.

Sự cố có thể do một số vấn đề cụ thể gây ra.

0

Đặt các lệnh liên quan đến "chương trình bắt đầu" và "chương trình dừng" vào tập lệnh hệ vỏ, làm cho tập lệnh có thể thực thi và sau đó đặt địa chỉ của nó thành đơn vị.

cũng có, cố gắng thoát khỏi nó trích dẫn đơn sử dụng dấu gạch chéo

\'

(tôi đã không cố gắng vì vậy tôi không biết nếu nó hoạt động).

+3

thoát trích dẫn một lần không hoạt động – dubeegee

Các vấn đề liên quan