我有一个非常简单的包装器脚本来启动一个监视网络连接的ruby程序。脚本在路由器上-因此我们使用ash,而不是bash。
因为我们使用monit来监控状态,所以我需要一个PID文件。问题是,包装器设置的进程id比ruby程序少1。
因此,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`
}发布于 2012-10-03 19:18:19
我想你必须这样做:
#!/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)中,$$包含shell的当前进程ID,而$!包含最近派生的异步子进程的进程ID。在本例中,$!包含ruby的PID。
https://stackoverflow.com/questions/12706968
复制相似问题