Проблема со сбоем shellscript после «exec kill -SIGINT»

Проблема со сбоем shellscript после «exec kill -SIGINT»

Я изменил скрипт оболочки, который нашел здесь: https://github.com/Slympp/ConanLinuxScript

Но у меня возникли проблемы с функцией "conan_stop". Скрипт просто завершается после

exec kill -SIGINT $pid

Скрипт успешно отправляет команду kill, но после этого он просто завершает работу без кода ошибки или чего-либо еще.

Все переменные в скрипте определены ранее в файле.

Полная функциональность

function conan_stop {

pid=$(ps axf | grep ConanSandboxServer-Win64-Test.exe | grep -v grep | awk '{print $1}')

if [ -z "$pid" ]; then
        echo "[$(date +"%T")][FAILED] There is no server to stop"
else
    if [ "$discordBotEnable" = true ]; then
        echo "[$(date +"%T")][SUCCESS] Discord bot is enabled"
        if [ -n "$botToken" ] && [ -n "$channelID" ]; then
            secLeft=$(($delayBeforeShutdown * 60))

            while [ $secLeft -gt "0" ]; do
                minLeft=$(($secLeft / 60))
                echo "[$(date +"%T")][WAIT] Server will be shut down in $minLeft minutes"
                python3 $discordScript $botToken $channelID "Servern kommer stängas ner om " $minLeft "minuter."
                secLeft=$(($secLeft - 60))
                sleep 60
            done
            python3 $discordScript $botToken $channelID "Servern stängs nu ner."
        else
            echo "[$(date +"%T")][ERROR] No Discord botToken or channelID found"
        fi
    fi

        echo "[$(date +"%T")][SUCCESS] Existing PIDs: $pid"
        exec kill -SIGINT $pid

        isServerDown=$(ps axf | grep ConanSandboxServer-Win64-Test.exe | grep -v grep)
        cpt=0
        while [ ! -z "$isServerDown" ]; do
                echo "[$(date +"%T")][WAIT] Server is stopping..."
                ((cpt++))
                sleep 1
                isServerDown=$(ps axf | grep ConanSandboxServer-Win64-Test.exe | grep -v grep)
        done
        echo "[$(date +"%T")][SUCCESS] Server stopped in $cpt seconds"

        if [ "$discordBotEnable" = true ]; then
                echo "[$(date +"%T")][SUCCESS] Discord bot is enabled"
                if [ -n "$botToken" ] && [ -n "$channelID" ]; then
                        python3 $discordScript $botToken $channelID "Servern stängdes ner efter $cpt sekunder."
                else
                        echo "[$(date +"%T")][ERROR] No Discord botToken or channelID found"
                fi
        fi
fi

}

решение1

execзаменяет оболочкус данной командой, как exec()системный вызов. Когда команда ( killздесь , ) останавливается, оболочка больше не существует, поэтому нет возможности для продолжения выполнения скрипта.

Исключения составляют два случая: 1) когда execзаданы перенаправления, в этом случае они просто применяются в текущей оболочке, и 2) когда команда не может быть выполнена, в этом случае execвыдается ошибка и возвращается ложный код завершения.

Итак, exec kill ...почти то же самое, что и kill ... ; exit. Не совсем то же самое, но в данном случае достаточно близко.

Связанный контент