Как запустить мой скрипт х раз в день? (Рубин на Linux) - PullRequest
0 голосов
/ 06 апреля 2010

Я хочу запустить свой скрипт ruby ​​ x раз в день (число может измениться) на моем linux окне. Что было бы лучшим способом сделать это, если я не хочу, чтобы это произошло одновременно? Я хочу, чтобы время (часы и минуты) было случайным

Я думал об использовании команды at. Сценарий будет вызван at через x часов / минут или около того, а затем сценарий установит еще один вызов с помощью at. Не уверен, что есть лучший способ или только рубиновый.

Ответы [ 4 ]

5 голосов
/ 06 апреля 2010

Я бы подумал об использовании программы at для запуска программ (вместо использования cron напрямую, потому что cron действительно работает только по фиксированному расписанию). Я также создал бы программу (я бы использовал Perl; вы будете использовать Ruby) для планирования случайной задержки до следующего выполнения задания.

Вам нужно будет подумать, важно ли, чтобы задание выполнялось x раз за 24 часа, и как должна работать случайность. Каков диапазон вариаций во времени. Например, у вас может быть задание cron, выполненное в полночь и, скажем, 7 минут, которое затем планирует задания «x» at с равномерным распределением по дню со случайным отклонением в расписании ± 30 минут. Или вы можете предпочесть альтернативу, которая планирует задания со средним разрывом в 24 часа в сутки и случайным отклонением некоторой величины. Разница в том, что первый механизм гарантирует, что вы получите x событий за день (если вы не делаете слишком экстремальные вещи); вторая может иногда получать события х-1 или х + 1 в течение 24 часов.

1 голос
/ 06 апреля 2010

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

Для Ruby это выглядит так: http://raa.ruby -lang.org / project / daemons /

0 голосов
/ 06 апреля 2010

Если вы хотите запускать X раз в день, установите для своей записи в crontab:

0 * / X * * * command_to_run

где X - почасовой интервал, на котором вы хотите запустить свою работу, чтобы получить желаемое количество казней / день. Например, используйте 2, чтобы запускать каждые два часа в общей сложности 12 казней в день.

В вашем коде используйте это вверху, чтобы заставить его спать в произвольное время вплоть до этого интервала cron:

# How long the program takes to run, in seconds. Be liberal unless having
# two instances running is OK.
EXECUTION_TIME = 10 

INTERVAL = 2 * 60 * 60 - EXECUTION_TIME

sleep(rand(INTERVAL))

Идея состоит в том, что cron будет запускать вашу программу через регулярные промежутки времени, но затем продолжит некоторое случайное количество секунд в этом интервале, прежде чем продолжить.

Измените значение EXECUTION_TIME на столько времени, сколько, по вашему мнению, потребуется для выполнения кода, чтобы дать ему возможность завершить работу до наступления следующего интервала. Измените «2» в ИНТЕРВАЛЕ на любой интервал времени.

Я не проверял это, но оно должно работать или, по крайней мере, направить вас на правильный путь.

0 голосов
/ 06 апреля 2010

Полагаю, вы можете настроить cronjob, который вызывает скрипт bash, который задерживает выполнение на случайное время, но я не знаю, сможете ли вы как-нибудь сделать это внутри cronjob. Вы можете найти некоторую информацию о том, как это сделать на этом сайте , и если вы не знаете о crontab и cronjobs, вы можете найти больше информации об этом здесь .

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