gpt4 book ai didi

php - Bash 脚本不会在后台启动后执行命令

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:18 24 4
gpt4 key购买 nike

Bash 等待信号结束

逻辑:

  1. 开始执行 bash 脚本,该脚本必须在后台启动 A.php 并重定向 stdout 记录文件或/dev/null
  2. A.php 成功执行 B.php
  3. 出错时执行 B.php,并以 A.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

bash:

#!/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

关于php - Bash 脚本不会在后台启动后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com