2013-02-03 78 views
0

我有一个cgi脚本正在运行,但我遇到了不等待命令输出的cgi脚本的问题。cgi bash脚本不等待命令的所有输出

下面是CGI脚本:

#!/bin/bash 
echo Content-type: text/plain 
echo "" 

case "$QUERY_STRING" in 
    start) 
    service servicename start 
    ;; 
    stop) 
    service servicename stop 
    ;; 
    restart) 
    service servicename restart 
    ;; 
    backup) 
    service servicename backup 
    ;; 
    checkisup) 
    service servicenamet checkisup 
    ;; 
    status) 
    service servicename status 
    ;; 
    *) 
    echo "Usage: $0 {checkisup|start|stop|restart|backup|status|restart}" 
    exit 1 
    ;; 
esac 

exit 0 

当我打电话与script.cgi?status

状态是执行状态的功能,形成我的服务

if pgrep -u $USERNAME -f $SERVICE > /dev/null 
    then 
    pre_log_len=`wc -l "$PATH/server.log" | awk '{print $1}'` 
    echo "$SERVICE is running... executing command" 
    as_user "screen -p 0 -S screenname -X eval 'stuff \"$command\"\015'" 
    sleep .1 
    tail -n $[`wc -l "$PATH/server.log" | awk '{print $1}'`-$pre_log_len] "$PATH/server.log" 
    fi 

的部分我有问题当函数到达sleep .1时,cgi脚本将继续而不等待高的输出。

任何想法?

+0

'睡眠.1',工作系统也许不错,但不能帮助调试这种情况。尝试“睡10”,看看是否改变了事情。祝你好运! – shellter

回答

1

你可能不会看到从tail任何输出,因为你的算法为-n论证的结果可能是0:

[email protected]:work$ wc -l dev-configuration.json 
    105 dev-configuration.json 
[email protected]:work$ tail -n 0 dev-configuration.json 
[email protected]:work$ 
+0

是的,但它不是零当我在终端运行命令, 我认为这可能是问题,所以我设置睡眠时间到1秒,但仍然没有帮助。 – ZeroErrors

+0

无赖。我仍然通过设置'tail -n 5'或类似的静态值来验证它。如果他们没有添加到你的日志文件中,我会说这是你的罪魁祸首。如果没有更改日志文件大小,则会在其中输出if/else以输出警告或其他内容。希望能帮助到你。 – Anew

+0

我想我发现了这个问题,cgi脚本在Apache用户上运行,无法访问该文件。但我认为它会输出这个错误,显然不是。 – ZeroErrors