2012-10-03 53 views
0

我有一个非常简单的包装脚本来启动一个监视网络连接的ruby程序。该脚本在路由器上 - 因此我们使用灰,而不是bash。ash pidfile显示错误的进程ID

由于我们使用监控状态监控,我需要一个PID文件。问题是,由wrapper设置的进程id比ruby程序小一个。

Monit因此跨越数百个进程。我怎样才能让包装器启动ruby程序并创建正确的pidfile?

我的包装看起来是这样的:

#!/bin/sh /etc/rc.common 
    start(){ 
    echo $$ > /var/run/ping.pid 
    ruby /etc/scripts/ping.rb & > /dev/null 2>&1 
    } 
    stop(){ 
    kill `cat /var/run/ping.pid` 
} 

回答

2

我认为你必须做的:

#!/bin/sh /etc/rc.common 
    start(){ 
    ruby /etc/scripts/ping.rb & > /dev/null 2>&1 
    echo $! > /var/run/ping.pid 
    } 
    stop(){ 
    kill `cat /var/run/ping.pid` 
} 

在POSIX壳(如sh),该$$包含的当前进程ID shell,而$!包含最近衍生的异步子进程的进程ID。在这种情况下,$!包含ruby的PID。

+0

如果我能拥抱你,我会!谢谢 – simonmorley