Перезапустить программу ruby - PullRequest
4 голосов
/ 10 января 2010

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

Необходимо запустить новый процесс и загрузить новую версию файла, чтобы можно было загружать любые новые команды и т. Д. И изменения конфигурации.

Ответы [ 3 ]

5 голосов
/ 10 января 2010

Просто запустите Kernel.exec функцию, которая заменит запущенный процесс новым.

Преимущество функции exec заключается в отсутствии промежутка времени, когда два разных бота запускаются одновременно. Это был один процесс, и после exec звонка он мгновенно заменяется новым.

2 голосов
/ 10 января 2010

Вы можете перезапустить бот, используя системную команду system("ruby /path/to/my/bot.rb"), когда требуется перезагрузка.

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

0 голосов
/ 10 января 2010

Пара возможностей, одна простая, другая, вероятно, меньше.

Во-первых, не могли бы вы поместить выполнение irb в файл циклической команды / сценария оболочки? Тогда ваша перезагрузка становится простой exit, и скрипт возвращается назад и снова запускает ваш файл Ruby. Если должен использоваться другой файл, имя (или путь) можно поместить в переменную среды перед выходом.

В качестве альтернативы, вы могли бы назвать eval с вашим переписанным сценарием в качестве аргумента? Это один из приемов, использованных в Archeopteryx Джайлза Боукетта - измените код и сохраните его, затем (в этом случае) цикл с таймером выбирает новый код и запускает его, используя eval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...