2014-01-10 88 views
0

击等待信号以结束bash脚本不会开始与后执行命令化背景

逻辑:bash脚本的

  1. 起动执行必须在回地面开始a.php只会和将stdout 日志文件或/ dev /上a.php只会成功执行空
  2. B.php
  3. 误差与a.php只会错误执行B.php作为参数

但是,庆典开始a.php只会等待...

#ps -aux 
root  27647 0.0 0.0 13336 652 pts/0 S+ 11:36 0:00 /bin/bash /var/www/scripts/bgluncher.sh -c php /var/scripts/A.php -l /var/log/A.log -p B.php 
root  27648 0.7 0.2 332396 87544 pts/0 S+ 11:36 0:02 php /var/scripts/A.php 

庆典:

#!/bin/bash 
COMM='' 
POST_CMD='' 
LOG=0 

while getopts ":l:c:p:" arg; do 
    case "${arg}" in 
     c) 
      COMM=${OPTARG} 
      ;; 
     l) 
      LOG=1 
      LOG_File=${OPTARG} 
      ;; 
     p) 
      POST_CMD=${OPTARG} 
      ;; 
    esac 
done 

if [ -z "${COMM}" ]; then 
    echo `date` ' ERROR: [bgluncher.sh] -c argument is empty ' >> ${LOG_File} 
else 
    if [ ${LOG} -eq 1 ] ; then 
     ${COMM} >> ${LOG_File} && ${POST_CMD} || ${POST_CMD}/error=$2 & 
     echo $! 
    else 
     ${COMM} >> /dev/null && ${POST_CMD} || ${POST_CMD}/error=$2 & 
     echo $! 
    fi 
fi 

exit 

生存还是毁灭,什么错误我已经取得?

回答

0

$2是第二个命令行参数(php),而不是COMM的退出代码,请使用$?。 您可能需要一个空间而不是$ {POST_CMD}后面的/; B.php error=2而不是B.php/error=2

+0

好的! 谢谢! 这是“$?”问题之一 其实PHP脚本等待/ arg1 = val1/arg2 = val2。 但bash仍在等待结束A.php并且不要在后台发送它 – Debster