Windrop + Cron |
Windrop + Cron |
Kreon |
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 Если мы впишем этот код в cron.tab, nnCron каждые пять минут будет проверять состояние бота Windrop, и при необходимости его перезапускать.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 )# Неоднократные запуски одинаковых ботов Во избежание проблемы со множественным запуском ботов следует убедиться, от чьего имени запущен бот, и от чьего - данный скрипт проверки. По умолчанию 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" Однако в таком случае вместе с eggdrop.exe будет запущен процесс cmd.exe, который автоматически завершится при отключении данного бота.SWHide NormalPriority START-APP: C:\eggdrop\eggdrop.exe eggconf2.conf Запуск ботов при старте системы Нетрудно было бы написать скрипт, автоматически запускающий Windrop'ы при запуске Windows, однако в этом фактически нет смысла, так как они и без этого будут запущены скриптами проверки работоспособности ботов в ближайшие пять минут. Регистрация nnCron Без лицензионного ключа nnCron работает в течение 30 дней. Однако процедура регистрации для русскоговорящих бесплатна и не требует подключения к сети. Для этого понадобится запустить программу tm.exe из корневого каталога nnCron с параметром xReg. Сделать это можно либо создав ярлык на эту программу, либо запустив её через cmd.exe. Затем в качестве имени пользователя необходимо вписать xUSSR регистрация, в качестве пароля - текущий день недели. -------------------- Не понял сам - не дай понять другому
|
Lo-Fi Version | Time is now: 16th May 2024 - 07:52 PM |