簡體   English   中英

Bash腳本不會以post-execute-command在后台啟動

[英]Bash script won't start in background with post-execute-command

重擊等待信號結束

邏輯:

  1. 開始執行必須在后台啟動A.php的bash腳本,並將stdout重定向到日志文件或/ dev / null
  2. 在A.php成功執行B.php
  3. 錯誤時以A.php錯誤作為參數執行B.php

但是,bash啟動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

做還是不做,我犯了什么錯誤?

$2是第二個命令行參數(php),而不是COMM的退出代碼,請使用$? 為了那個原因。 並且您可能希望在$ {POST_CMD}之后使用空格而不是/; B.php error=2而不是B.php/error=2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM