我的.sh文件中有以下新行
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
当我用双引号的时候,它有点奏效,但是pidFile有错误的PID,它被closures了。 从研究的解决scheme是使用单引号,我不能得到单引号工作。
我现在得到2个错误
bash:$ pidFile:模棱两可的redirect
bash:$ serviceLogFile:模棱两可的redirect
似乎我不能使用variables或输出到单引号variables?
这条线几乎可以工作,但是pid只有一个
下面的代码将从启动开始,但PID是错误的。
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
这不得不取代这个马车旧的2行代码。
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" # Don't forget to add -H so the HOME environment variable will be set correctly. sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
旧的代码工作正常,但不能从启动启动。
进程标识是closures的,因为你在$javaCommandLine之后放了一个额外的& 。 换句话说,在调用echo $!之前,你已经在后台放了两个进程了echo $! ,从而得到>>$serviceLogFile 2>&1的PID而不是$javaCommandLine 。 这两个部分应该放在一个,如旧的2行代码所示
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
您可能需要将其更改为 –
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1