Завершить сценарий bash, если процесс уже запущен - PullRequest
0 голосов
/ 02 января 2012

Я использую скрипт запуска, чтобы запустить наш сервер Minecraft через webmin на CentOS.Резервное копирование нескольких файлов перед запуском самого сервера.Недавно мы испортили наши данные, случайно выполнив сценарий дважды подряд, что привело к двум запускам сервера Minecraft, и все пошло наперекосяк с файлами данных и тому подобным.

Чтобы этого не случилось, я хочускрипт для завершения, если он обнаруживает, что процесс запущен.Я искал похожие проблемы, и предлагались такие вещи, как блокировка файлов, но у меня нет возможности их удалить, поскольку сценарий запуска настраивает только экран для процесса сервера Minecraft, а остановка сервера обычно выполняется командойзавершение экрана или остановка сервера с помощью игровых команд.

Процесс сервера запускается с помощью этой команды:

screen -dmS minecraft java -Xincgc -Xmx2G -jar server.jar

Как я могу заставить скрипт запуска обнаруживать, если этот процесс уже запущен,а потом кончится сам?

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Используйте этот скрипт:

#!/bin/bash
LOCKDIR="/path/to/lockdir"

if [ ! mkdir "$LOCKDIR" ]; then
    echo >&2 "Server is already running"
    exit 1
fi

# Here: when exiting, or receiving any of the mentioned signals, remove the lock file      
trap "rmdir \"$LOCKDIR\"" exit INT HUP TERM QUIT
 
# It would be tempting to exec instead, but DON'T DO IT: otherwise the trap is forgotten
minecraft java -Xincgc -Xmx2G -jar server.jar

exit $?

и запустите его на своем экране.

1 голос
/ 02 января 2012
...