Geo*_*Geo 5 java linux shell scripting
我们想要构建一个每晚运行的脚本(杀死并重启java进程).为此,我们需要捕获进程号(因为可能有多个java进程在运行).下面的命令基本上是我们用来获取进程号的命令,可能是在grep末尾有一个正则表达式.除非有更好的建议.
root#ps -e |grep 'java'
18179 pts/0 00:00:43 java
Run Code Online (Sandbox Code Playgroud)
我们想知道如何解析上面的输出并将其转换为shell变量,因此我们可以使用kill命令,如下所示.
kill -9 ${processid}
wait 10
Run Code Online (Sandbox Code Playgroud)
注1:我们不能依赖正常服务停止命令的原因是因为进程有时不想死.我们必须手动使用kill命令.
有几个选项可以解决这个问题。如果您使用的是 bash,则 shell 变量 '$!' 将包含最后一个分叉子进程的 PID。因此,启动 Java 程序后,请执行以下操作:
echo $! > /var/run/my-process.pid
Run Code Online (Sandbox Code Playgroud)
然后,在您的 init 脚本停止 Java 进程后:
# Get the pidfile.
pid=$(cat /var/run/my-process.pid)
# Wait ten seconds to stop our process.
for count in $(1 2 3 4 5 6 7 8 9 10); do
sleep 1
cat "/proc/$pid/cmdline" 2>/dev/null | grep -q java
test $? -ne 0 && pid="" && break
done
# If we haven't stopped, kill the process.
if [ ! -z "$pid" ]; then
echo "Not stopping; terminating with extreme prejudice."
kill -9 $pid
fi
Run Code Online (Sandbox Code Playgroud)
完成后请务必删除 pidfile。
| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |