如何使用进程ID停止jar文件并运行它agin

时间:2018-02-15 11:07:43

标签: shell ubuntu

在我目前的情况下,我有一个在服务器上运行的jar文件。当我需要再次部署它时,我需要停止jar文件并使用shell脚本

运行新的jar文件

通过执行java -jar xyz.war &它执行jar文件。 但要检查pid我需要使用命令pgrep -f xyz.jar再次检查 它给出了进程ID。现在我如何存储进程ID,以便我可以在杀死时使用它,然后在部署时运行新的jar。

#!/bin/sh
if pgrep -x xyz.jar > /dev/null
then
    echo "Running"
else
    echo "Stopped"
    cd /folder/location
    java -jar xyz.jar &
fi

任何人都可以帮助我如何在if条件部分

中获取进程ID

2 个答案:

答案 0 :(得分:1)

只需将pid存储在单独的变量中:

apid=$(pgrep -x xyz.war)

然后将其用作$ apid

apid=$(pgrep -x xyz.war) 
if [ -n "$apid" ]; then 
    .............. 
fi

答案 1 :(得分:1)

以下是您如何使用已经收到的答案。

#!/bin/sh
if apid=$(pgrep -f xyz.jar)
then
    echo "Running, pid is $apid"
else
    echo "Stopped"
    cd /folder/location
    java -jar xyz.jar &
fi

你不应该kill -9这个过程,因为这会阻止Java在终止之前进行任何清理 - 你应该经常只使用kill,除非你知道代码中存在阻止它工作的错误(甚至可能在使用kill)发射重型火炮之前尝试常规kill -9

从您的问题中不清楚您会在哪种情况下杀死它(当您发现它已经在运行时,您想要杀死它吗?)无论如何,这是一个非常常见的常见问题解答 - 请查找重复项,例如在Stack Overflow bash tag info page

的常见问题列表中