Quiz Memorial Forum

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Windrop + Cron
Kreon
post Aug 8 2007, 11:47 AM
Post #1


Developer
******

Group: Root Admin
Posts: 396
Joined: --
From: Внешние пределы
Member No.: 2



Прелюдия
Как известно, Windrop'ы не комплектуются скриптами для проверки работоспособности бота, и приспособить Unix'овский botchk под Windows представляется достаточно накладным, ввиду отсутствия в последней как crontab'a, так и подходящего шелла. Вариант с использованием Cygwin'a рассматривать не будем.
Решим задачу другим способом. Для этого нам понадобится утилита nnCron для Windows. Скачать ее можно с официального сайта разработчика. Программа устанавливается как системный сервис, и вероятность её отказа самой по себе достаточно низка.
Идея заключается в возможности использования в описании задачи nnCron'a встраиваемых скриптов. Мы будем редактировать файл cron.tab из корневого каталога nnCron'a любым текстовым редактором, но также можно воспользоваться и графическим интерфейсом самой программы. При редактировании файла cron.tab для того, чтобы изменения вступили в силу, необходимо в трее в меню nnCron выбрать опцию Reload crontabs, либо подождать минуту.


Проверка
Прежде всего нам необходимо добавить непосредственно скрипт, который бы проверял запущенность нашего Windrop'a. Предположим, что Windrop запущен из каталога C:\eggdrop и бот создает PID-файл с именем pid.Windrop. Тогда наиболее просто проверку можно реализовать следующим образом:
CODE
#( windropchk
Time: */5 * * * * *
VARIABLE botpid
Action:
FILE-EXIST: "C:\eggdrop\pid.Windrop"
IF
  S" C:\eggdrop\pid.Windrop" FILE S>NUM botpid !
  PROC-EXIST: "%botpid @%"
  IF
    EXIT
  ELSE
    FILE-DELETE: "C:\eggdrop\pid.Windrop"
  THEN
THEN

StartIn: "C:\eggdrop"
SWHide   NormalPriority
START-APP: C:\eggdrop\eggdrop.exe
)#
Если мы впишем этот код в cron.tab, nnCron каждые пять минут будет проверять состояние бота Windrop, и при необходимости его перезапускать.


Неоднократные запуски одинаковых ботов
Во избежание проблемы со множественным запуском ботов следует убедиться, от чьего имени запущен бот, и от чьего - данный скрипт проверки. По умолчанию nnCron запускает процессы от имени System, и если до установки подобного скрипта бот был запущен от имени User, то, скорее всего, у nnCron не хватит прав, чтобы считать файл pid.Windrop, что для скрипта будет означать отсутствие такового файла и вызовет повторный запуск бота.
Решить эту проблему можно, к примеру, указав в настройках nnCron имя пользователя, от которого будут выполняться скрипты, либо вписав ваше имя пользователя для запуска конкретно этого скрипта, добавив в его начало строку вида:
CODE
User: "Администратор" SecPassword: "eNO7RoV=" Domain: "SC2K-SERVER" LogonInteractive
Подробнее об этом можно прочесть в документации по программе nnCron в разделе Работа с программой->Задача->Авторизация.


Выключение
Для большей точности работы нам понадобится ещё один скрипт. Дело в том, что при выключении системы многострадальный Windrop от системы обычного для eggdrop'а SIGTERM'а не получает, и, поэтому, завершается в аварийном режиме, не сохраняя userfile'а и не удаляя своего PID-файла. Мы можем немного облегчить его муки, хотя реализовать корректное отключение простой возможности у нас нет. Тем не менее мы можем насильно отключить нашего бота и своими силами удалить его PID-файл, чтобы впоследствие он не вводил нас в заблуждение.
Также предположим, что Windrop запущен из каталога C:\eggdrop и бот создает PID-файл с именем pid.Windrop. Тогда скрипт будет выглядеть таким образом:
CODE
#( windropkill
WatchQueryShutdown
VARIABLE botpid
Action:
FILE-EXIST: "C:\eggdrop\pid.Windrop"
IF
   S" C:\eggdrop\pid.Windrop" FILE S>NUM botpid !
   PROC-EXIST: "%botpid @%"
   IF
       KILL: "%botpid @%"
   THEN
   FILE-DELETE: "C:\eggdrop\pid.Windrop"
THEN
)#


Если ботов несколько
Для каждого Windrop'а придется создавать отдельную задачу, либо копировать содержимое поля Action: внутри одной задачи, если вы понимаете, что делаете. Впрочем, для задачи проверки работоспособности ботов копированием содержимого раздела Action мы ничего не добьемся - это верно только для отключения, т.к. там не используется директива EXIT.
Каждая задача должна иметь уникальное имя, которое указывается в первой строке после символов "#(":
CODE
#( windropchk
И должна заканчиваться символами ")#".


Если используются разные конфигурационные файлы для запуска Windrop'ов из одного каталога
Если вы привыкли запускать из одного каталога, используя один eggdrop.exe, несколько разных ботов, то тогда для запуска в скрипте проверки ничто не мешает указать:
CODE
StartIn: "C:\eggdrop"
SWHide   NormalPriority
START-APP: C:\eggdrop\eggdrop.exe eggconf1.conf
CODE
StartIn: "C:\eggdrop"
SWHide   NormalPriority
START-APP: C:\eggdrop\eggdrop.exe eggconf2.conf
Однако в таком случае вместе с eggdrop.exe будет запущен процесс cmd.exe, который автоматически завершится при отключении данного бота.


Запуск ботов при старте системы
Нетрудно было бы написать скрипт, автоматически запускающий Windrop'ы при запуске Windows, однако в этом фактически нет смысла, так как они и без этого будут запущены скриптами проверки работоспособности ботов в ближайшие пять минут.


Регистрация nnCron
Без лицензионного ключа nnCron работает в течение 30 дней. Однако процедура регистрации для русскоговорящих бесплатна и не требует подключения к сети. Для этого понадобится запустить программу tm.exe из корневого каталога nnCron с параметром xReg. Сделать это можно либо создав ярлык на эту программу, либо запустив её через cmd.exe. Затем в качестве имени пользователя необходимо вписать xUSSR регистрация, в качестве пароля - текущий день недели.


--------------------
Не понял сам - не дай понять другому
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



Lo-Fi Version Time is now: 28th March 2024 - 07:02 PM
Design by GPF © 2006