12

Может быть, я совершенно чокнутый, и если так - это нормально. Но как мне запланировать работу, чтобы по какому-то случайному расписанию транслировать глупое сообщение, как из fortune?

осветление
да - это моя личная рабочая станция - я не планирую делать что-то шаткое на рабочем сервере :)

4 ответа4

13

У меня есть много команд в /etc /crontab, которые делают разные вещи, а некоторые требуют точности в считанные секунды. Теперь cron может иметь более высокое разрешение, сохраняя все время видимым и централизованным.

Этот пример получает и анализирует веб-страницу от 10 до 50 секунд перед каждыми 5 минутами:

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

Он не должен иметь точное время, так как данные медленно перемещаются, но он помогает максимально сократить время выполнения munin-узла, не дожидаясь веб-страниц. (Плагин дополнительно кэширует страницу в течение 30 минут, чтобы уменьшить ненужные попадания, но должен обновлять базу данных каждые 5 минут).

Обратите внимание, что \% - cron заменяет% на «\n» - полезно для хранения текста в одной строке.

12

at более простой интерфейс для этого типа целей, если at установлен, на машине запущен atd и пользователю разрешено использовать команду.

Например (проверьте точный синтаксис, используя man at или info at),

at -f файл now + 53 minutes

или же

в файле at -f now + 2 hours

выполнит команды в указанном файле через 53 минуты или 2 часа соответственно.

at затем может быть повторно запустить в начале запланированного задания с подходящим (случайной или иным образом ) начать, отсчет, и время-единицы.

редактировать

Как подсказывает Арджан ниже, если вы используете это не для игрушек, а для других, вам нужно подумать о таких проблемах, как, например,

  1. если следующий запуск начинается до того, как завершится предыдущий (например, является ли сценарий повторным?) или же

  2. если пробег не завершается правильно или

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

  4. о регистрации и отчетности о неудачных или успешных запусках.

6

Внутренне cron , я не думаю, что такая особенность существует. Я думаю , что лучшим решением было бы поместить команду в скрипт и поместить случайный интервал sleep в верхней части сценария и использовать переменную $RANDOM Затем запускайте скрипт один раз в день в обычной работе cron.

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
6

Это будет зависеть от того, какой тип интервала вы после. но давайте предположим, что вы хотите, чтобы скрипт запускался случайным образом с вероятностью 1:30 (один раз каждые 30 минут)

  • Создайте свой скрипт cron для перидоты, скажем, 10 минут. Он будет стрелять 3 раза каждые 30 минут.

  • Внутри скрипта используйте rand как условие для оператора if . Вы хотите, чтобы rand вернул число от 0 до 2. Если это 0, выполнить содержимое оператора if.

По сути, ваш скрипт всегда запускается с заданным интервалом. Но выполнит только интересующую вас команду случайным образом. Ваш поставщик услуг поблагодарит вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .