在写一个脚本,以daemon service方式运行一个java程序。
直接以nohup执行,没有问题,pid会写入到文件。
1 nohup $JAVA_CMD -classpath .:${APP_HOME}/lib/test.jar com.test.example.Startup > \$APP_HOME/err.log 2>&1 2 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/java 2 APP_HOME=/usr/local/test 3 APP_PID=$APP_HOME/test.pid 4 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 \$! ,要加转义符号