2014-01-10 2 views
0

Bash ждет сигнала, чтобы закончитьBash скрипт обыкновение начинать с Backgroud после выполнения команды-

Логика: исполнение

  1. начало Баш скрипт, который должен начать A.php в заднем месте и перенаправить стандартный вывод в лог-файл или/Dev/нуль
  2. на успех a.php выполнить B.php
  3. об ошибке выполнения B.php с ошибкой a.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

Ok! Спасибо! Это была одна из проблем «$?» На самом деле php-скрипты ждут/arg1 = val1/arg2 = val2. Но bash все еще ждет конца A.php и не посылает его в фоновом режиме – Debster

Смежные вопросы