我有一堆脚本,用于在多台服务器上启动类似的进程。我想将它们压缩成一个名为“START”的Python脚本,但是当通过ssh运行时出现了奇怪的问题。
"./START APP_A" 的效果如预期:APP_A被启动并开始工作。控制权立即返回到控制台(在APP_A终止之前)。
"ssh localhost /path_to/START APP_A" 有点奇怪:APP_A被启动并开始工作,但ssh不会在屏幕上打印任何输出或将控制权返回到控制台,直到APP_A终止。
我认为这可能是信号或文件句柄的问题,但我束手无策。这里是导致麻烦的Popen调用:
"./START APP_A" 的效果如预期:APP_A被启动并开始工作。控制权立即返回到控制台(在APP_A终止之前)。
"ssh localhost /path_to/START APP_A" 有点奇怪:APP_A被启动并开始工作,但ssh不会在屏幕上打印任何输出或将控制权返回到控制台,直到APP_A终止。
我认为这可能是信号或文件句柄的问题,但我束手无策。这里是导致麻烦的Popen调用:
sub = subprocess.Popen(shlex.split(cmd), stdout=open(file_out, 'a+'), stderr=subprocess.STDOUT, close_fds=True)
print 'New PID:', sub.pid
我在RHEL上使用Python 2.4.3。
编辑: 将Python脚本包装起来似乎可以解决问题:
DIR="$( cd "$( dirname "$0" )" && pwd )"
pushd $DIR >> /dev/null
./START $1 &
popd >> /dev/null