Задать вопрос
@Nikita1244
Anonymous

Как сделать чтобы задача запускалась в диапазоне 0:00 — 01:00?

Есть задача, которую необходимо запускать в случайное время в диапазоне 0:00 - 1:00.
Как можно это реализовать?
  • Вопрос задан
  • 371 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 4
ky0
@ky0
Миллиардер, филантроп, патологический лгун
В systemd-timer есть параметр, добавляющий разброс в указанном диапазоне. Задача в кроне со слипом - для 2023 года жуткий костыль и атавизм.
Ответ написан
Комментировать
@dronmaxman
VoIP Administrator
С помощью systemd
Создайте файл `myscript.service`

[Unit]
Description=Мой скрипт

[Service]
ExecStart=/путь/к/вашему/скрипту.sh


2. Создайте таймер для запуска скрипта `myscript.timer`

[Unit]
Description=Таймер для моего скрипта

[Timer]
OnCalendar=*-*-* 00:00:00
RandomizedDelaySec=3600

[Install]
WantedBy=timers.target


3. Активируйте и запустите таймер.

sudo systemctl daemon-reload
sudo systemctl enable myscript.timer
sudo systemctl start myscript.timer


Параметр `RandomizedDelaySec` устанавливает случайную задержку в секундах между запусками.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В крон на 00:00 добавляете запуск
/usr/bin/sleep $((`/usr/bin/od -An -N2 -t u2 /dev/random` % 3600)) && ваша_задача
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Добавьте рандомный sleep в команду в кроне

/usr/bin/sleep $(($RANDOM%61)) && yourjob.sh
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Запуск в случайное время - это такая себе наивная попытка сделать балансировку нагрузки.
А хочется спросить что будет если случайность оказалась не очень удачливой и мы все таки
пересекаемся с другим джобом? Тут лучше бы все-таки сделать retry-logic с повторами
что если существует mutex, file, socket или еще бох знает какой разделяемый объект
то мы берем паузу на 5 минут и потом просто делаем повтор попытки.
Ответ написан
Viji
@Viji
DevOps Engineer
что значит в диапазоне? Каждую секунду этого промежутка времени? Или начало в 00;00 и окончание в 01:00?

в общем случае используют cron

00 00 * * * /my_task.sh

каждую ночь в полночь
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы