如果程序/我的世界服务器关闭或崩溃,我如何制作一个 while true 循环只再次启动它?

问题描述

嗨,我正在运行带有重启插件minecraft 服务器,但它需要程序自行重启,所以我使用了 While true sleep 5 循环,它似乎工作正常,但一段时间后它只是开始一次又一次地打开从而在某个时候可以一直使用 100% 的 cpu

如何让它在服务器关闭或崩溃之前不再启动程序?

#!/bin/sh
while true
do
java -xms1G -Xmx6G -jar server.jar
sleep 5
done

由于 sleep 在它一次又一次地不断打开后设置为 5,我看到它说每 5 秒启动一次 minecraft 服务器失败,但它已经在运行,我希望它只在程序运行时运行 while 循环没有运行。

解决方法

使用带有 -f 标志的 pgrep,您可以使用一些参数搜索正在运行的进程。您可以使用它来检查服务器是否已经在运行。

例如:

#!/bin/bash

while true
do
    if ! pgrep -f server.jar
    then
        java -Xms1G -Xmx6G -jar server.jar
    fi
    sleep 5
done