LINUX.ORG.RU
ФорумAdmin

Скрипт на автоматический рестарт процесса, несколько вопросов


1

2

Здравствуйте.

У меня на убунтовском сервере поднят игровой сервер, в гайдах к которому советуют перезагружать его каждые 4-5 часов.

Собственно писал скрипт на его автоматический рестарт и возникла пара вопросов, буду благодарен за помощь.

Запускаю сервер в screen:

screen -S game -d -m ./launch_game_server.sh

Сам скрипт: restart.sh

#!/bin/sh
screen -S game -X quit
kill -9 | grep game_server
cd /game_folder/
screen -S game -d -m ./launch_game_server.sh
Далее crontab -e прописываю в открывшемся файле: * */4 * * * cd /game_folder && ./restart.sh

Первый вопрос: правильно ли написан данный скрипт?

Второй вопрос: читал что не советуют убивать процессы kill -9, вроде как остаются какие-то дочерние процессы, которые все равно нагружают систему и если это так, как убить процесс по нормальному?

Третий вопрос: имеет ли смысл ребутать сам сервер (Ubuntu) для профилактики?


1. Нет, неправильно: kill -9 | grep game_server

2. Обычно принятно сначала отправлять SIGTERM, только потом SIGKILL. Дочернии процессы могут остаться всегда, нужно смотреть есть ли он вобще у этого сервера и как их можно идентифицировать — по пользователю, по группе процессов, по имени...

3. Ребутать сам сервер смысла не вижу.

mky ★★★★★
()

Сделай скрипт в /etc/init.d и добавь в крон service restart. Выясни, нет ли у сервера штатной возможности перезагрузки/отключения (команда, например).

ziemin ★★
()

для сервисов, которые не имеют в комплекте нормального инит скрипта, я юзаю runit + простенький скрипт. Далее управление идет командой sv(8). Если что-то надо периодически перезапускать, то добавь в начало команду timeout. Она убъёт процесс, а sv его сам перезапустит.

Bers666 ★★★★★
()

скрипт может быть и правильно или неправильно, но запускаться он будет каждую минуту в нужные часы.

anto215 ★★
()
Ответ на: комментарий от mky

Обычно принятно сначала отправлять SIGTERM

а если SIGTERM не будет успешен, kill завершится с сигналом возврата 1 или 0?

teod0r ★★★★★
()
Ответ на: комментарий от teod0r

C кодом заверния 1. И выведет на stderr одну из трёх ошибок (см man 2 kill). Но, успешное выполнение kill это просто передача сигнала процессу, а уж завершится процесс или проигнорирует SIGTERM это другое дело.

mky ★★★★★
()
Ответ на: комментарий от mky

а уж завершится процесс или проигнорирует SIGTERM это другое дело.

вот как раз это и интересовало

teod0r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.