На сей раз я расскажу о собственном опыте автоматического запуска бота на сервере с установленным Debian В чем состоит проблема?
Нужно автоматически запускать бота при перезагрузке сервера.
Нужно запускать бота после его падения по любой причине.
Нужно периодически перезапускать бота, так как из-за утечек ресурсов через некоторое время бот создаст излишнюю нагрузку на систему.
При этом необходимо определять что бот уже запущен, чтобы не запускать лишних копий.
Я решил эти вопросы с помощью небольшого скрипта, который привожу ниже:
Code
#! /bin/sh
JAVA=/usr/bin/java
JAR_HOME=/home/spec/bot
JAR=bot.jar
PID=$JAR_HOME/bot.pid
STATE=$JAR_HOME/state
d_start() {
if [ -f $PID ]; then
PID_VALUE=`cat $PID`
if [ ! -z "$PID_VALUE" ]; then
PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
if [ ! -z "$PID_VALUE" ]; then
exit 1;
fi
fi
fi
PREV_DIR=`pwd`
cd $JAR_HOME
exec $JAVA -Xmx50m -jar $JAR &
echo $! > $PID
cd $PREV_DIR
}
d_stop() {
if [ -f $PID ]; then
PID_VALUE=`cat $PID`
if [ ! -z "$PID_VALUE" ]; then
PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
if [ ! -z "$PID_VALUE" ]; then
echo "Stop" > $STATE;
WAIT_TIME=0
while [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 -a "$WAIT_TIME" -lt 20 ]
do
sleep 1
WAIT_TIME=$(expr $WAIT_TIME + 1)
done
if [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 ]; then
kill -9 $PID_VALUE
fi
fi
fi
rm -f $PID
fi
}
case "$1" in
start)
d_start
;;
stop)
d_stop
;;
restart)
d_stop
d_start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
В переменную JAR_HOME записываем путь до папки с нашим ботом, а в переменную JAR - имя самого jar файла бота. Сохраните текст скрипта в файле в вашем домашнем каталоге, например "bot.sh", затем предоставьте ему права на запуск.
Чтобы запустить бота, нужно набрать команду (находясь в домашней иректории): ./bot.sh start
Если бот уже запущен, команда ничего не сделает. После запуска в директории бота будет создан файл "bot.pid" с идентификатором процесса, именно по нему и определяется факт работы бота.
Для остановки бота наберите команду: ./bot.sh stop
Эта команда сначала попытается остановить бота обычным способом - записав "Stop" в файл "state". Если бот завис - процесс будет уничтожен принудительно.
Для перезапуска бота нужно использовать команду: ./bot.sh restart
Теперь запишем задание в cron, чтобы наш бот запускался автоматически.
Любимым текстовым редактором создадим файлик со следующими строчками:
*/30 * * * * /home/spec/bot/bot.sh start >/dev/null 2>&1
* 4 * * * /home/spec/bot/bot.sh restart >/dev/null 2>&1
Обзовем наш файлик, к примеру, "cron.tab". Добавим задание в cron от имени нашего пользователя следующей командой: crontab ./cron.tab
Набрав "crontab -l" можно убедиться, что наши задания добавлены. Команда "crontab -r" позволяет удалить все задания, если они больше не нужны.
Теперь наш бот будет запускаться в течение получаса после перезагрузки сервера, отключения в админке или падения бота, а так же перезагружаться каждые сутки в 4 часа утра.
Внимание!!! Информация предоставлена FENIX