.sh não está em execução e não recebe erros

0

Eu estou tentando criar um arquivo .sh para verificar se o servidor está sendo executado e se não iniciá-lo. Eu não estou recebendo nenhum eco deste script ou qualquer falha, mas não está sendo executado. Alguém pode me ajudar a corrigir isso ou uma maneira melhor de corrigi-lo. Eu não sou um programador Acabei de editar alguns outros scripts para obter isso.

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

isto é o que eu recebo e quando eu o executo

root@FTB:/home/jon/FTB/FTBnew# bash Check.sh
root@FTB:/home/jon/FTB/FTBnew#
    
por smally2189 21.01.2014 / 17:36

2 respostas

5

Toda a sua lógica está dentro de um bloco if [ "$1" = start ] , então se você não der esse argumento na linha de comando, seu script não fará nada.

Você deve validar os argumentos primeiro:

if [ $# -ne 1 ] || [ "$1" != "start" ]; then
    echo "usage: $0 start"
    exit 1
else 
    # your stuff here
fi
    
por glenn jackman 21.01.2014 / 17:41
0

Você precisa executá-lo como

bash Check.sh start

... porque nada é feito se [ "$1" != start ] .

Além disso, esta linha

if ps -ef | grep minecraft_server.jar | grep -v -q grep ; then

deve ser

if ps -ef | grep FTBServer.jar | grep -v -q grep ; then

Algumas outras notas:

  • Use matrizes para argumentos Bash.
  • Citar variáveis quando elas são usadas.
  • Use [[ em vez de [ .
  • if de correção de linha, conforme mostrado acima.

Então, uma versão mais correta seria:

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
    
por kiri 24.01.2014 / 09:46