在寫一個腳本,以daemon service方式運行一個java程序。
直接以nohup執行,沒有問題,pid會寫入到文件。
1 nohup $JAVA_CMD -classpath .:${APP_HOME}/lib/test.jar com.test.example.Startup > /$APP_HOME/err.log 2>&12 echo $!>$APP_PID
以su執行,此時pid不是java進程的id,而是shell的進程id
1 su - root -c "nohup $JAVA_CMD -classpath .:${APP_HOME}/lib/test.jar com.test.example.Startup > /$APP_HOME/err.log 2>&1 & "2 echo $!>$APP_PID
解決:可以將 echo $!>APP_PID 放在 nohup后面
1 JAVA_CMD=/usr/local/jdk1.7.0_10/bin/java2 APP_HOME=/usr/local/test3 APP_PID=$APP_HOME/test.pid4 su - root -c "nohup $JAVA_CMD -classpath .:${APP_HOME}/lib/test.jar com.test.example.Startup > /$APP_HOME/err.log 2>&1 & echo /$! > $APP_PID"
注意, echo /$! ,要加轉義符號
新聞熱點
疑難解答