2012-10-03 48 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