我尝试创建一个 .sh 文件来检查服务器是否正在运行,如果没有,则启动它。我没有从该脚本得到任何回显或任何失败但它没有运行。有人可以帮我修复这个问题或更好的方法来纠正它吗?我不是程序员,我只是编辑了其他几个脚本来解决这个问题。
JAVA="java -Xms512M -Xmx3072M -XX:PermSize=128m -jar FTBServer.jar nogui"
DIR="/home/jon/FTB/FTBnew"
if [ "$1" = start ] ; then
if ps -ef | grep FTBServer.jar | grep -v -q grep ; then
echo "Minecraft is already running"
else
echo "Starting!" && cd $DIR && screen -dmS minecraft $JAVA
sleep 7
if ps -ef | grep minecraft_server.jar | grep -v -q grep ; then
echo "Minecraft server started successfully"
else
echo "Minecraft server failed to start"
fi
fi
fi
这是我得到的,当我运行它时
root@FTB:/home/jon/FTB/FTBnew# bash Check.sh
root@FTB:/home/jon/FTB/FTBnew#
答案1
所有逻辑都在一个if [ "$1" = start ]
块内,因此如果您没有在命令行上提供该参数,则您的脚本不会执行任何操作。
您应该首先验证这些论点:
if [ $# -ne 1 ] || [ "$1" != "start" ]; then
echo "usage: $0 start"
exit 1
else
# your stuff here
fi
答案2
您需要将其运行为
bash Check.sh start
... 因为如果 则什么也不会发生[ "$1" != start ]
。
另外,这一行
if ps -ef | grep minecraft_server.jar | grep -v -q grep ; then
应该
if ps -ef | grep FTBServer.jar | grep -v -q grep ; then
其他一些注意事项:
- 使用数组作为 Bash 参数。
- 使用变量时请用引号引起来。
- 使用
[[
而不是[
。 if
线路校正如上图。
因此,更正确的版本应该是:
JAVA=(java -Xms512M -Xmx3072M -XX:PermSize=128m -jar FTBServer.jar nogui)
DIR="/home/jon/FTB/FTBnew"
if [[ "$1" == start ]]; then
if ps -ef | grep FTBServer.jar | grep -v -q grep; then
echo "Minecraft is already running"
else
echo "Starting!"
cd "$DIR" &&
screen -dmS minecraft "${JAVA[@]}"
sleep 7
if ps -ef | grep FTBServer.jar | grep -v -q grep; then
echo "Minecraft server started successfully"
else
echo "Minecraft server failed to start"
fi
fi
fi