我如何获得这个Java应用程序的PID?

时间:2015-08-03 15:38:02

标签: java jenkins daemon

我的(Ubuntu)服务器上有一个java应用程序。如果我这样做,那么它就会正确启动:

/usr/bin/java -cp /home/jenkins/veta/lily.jar com.sugarapp.lily.Main 

但我不知道如何获得它的PID。我不知道如何使用init.d脚本来阻止它。

我有一个不同的应用程序,用Clojure编写,为此我能编写一个运行良好的init.d脚本。所以我试着为我的Java应用程序重新设计init.d脚本,这就是我得到的:

WORK_DIR="/home/jenkins/veta"
NAME="lily"
JAR="lily.jar"
USER="jenkins"
DAEMON="/usr/bin/java"
DAEMON_ARGS=" -cp /home/jenkins/veta/lily.jar com.sugarapp.lily.Main"

start () {
  echo "Starting lily..."
  if [ ! -f $WORK_DIR/lily.pid ]; then
    /sbin/start-stop-daemon --start --verbose --background --chdir $WORK_DIR --exec $DAEMON --pidfile $WORK_DIR/lily.pid --chuid "$USER" --make-pidfile -- $DAEMON_ARGS
  else
    echo "lily is already running..."
  fi
}

stop () {
    echo "Stopping lily..."
    /sbin/start-stop-daemon --stop --exec $DAEMON --pidfile $WORK_DIR/lily.pid
    rm $WORK_DIR/lily.pid
}

但这不起作用。虽然$ WORK_DIR / lily.pid中的PID每次运行脚本时都会更改,但似乎没有运行该PID的进程。如果我尝试:

ps aux | grep java

我没有看到这个应用程序,也没有尝试使用PID。

那么有没有办法可以使用第一个命令,但不知何故捕获PID,所以我可以存储它以供日后使用?

我只想要一种可靠的方法来停止和启动这个应用程序。这可以通过PID或其他因素。我愿意接受建议。

更新:

也许我的问题不清楚?像jps或ps之类的东西会给我太多答案。如果我执行类似“ps aux | grep java”的操作,我会看到服务器上运行了5种不同的Java应用程序。 start-stop-daemon不会知道哪个PID属于这个特定的应用程序,也无法弄清楚我应该在init.d脚本中提供什么。

2 个答案:

答案 0 :(得分:3)

如果您的系统安装了jdk,则会有一个名为jps的实用程序驻留在jdk / bin中。它将显示正在运行的java进程列表。利用它。

如果你的机器上没有安装jdk,那么你必须从ps -eaf命令grep java进程。

答案 1 :(得分:2)

如果你想从命令行获得pid,这可能有效:

myCommand & echo $!

我从已接受的回复中复制到ServerFault中一个非常相似的主题:https://serverfault.com/a/205504