LINUX.ORG.RU

Как ты себе представляешь её реализацию и в чём великий замысел такой возможности?
Можно сделать так: запускаешь скрипт в 12, ждёшь от 0 до 21600 сек.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Если очень поверхностно, то мне нужно менять параметны, которые видны вообще всем вокруг. Чтобы не создавать закономерность, мне нужно менять их в рандомное время в заданном диапазоне.

D3306 ()
Ответ на: комментарий от D3306

Напиши скрипт, который при запуске с 12 по 18 проверяет не запускался ли он, а если нет, то бросает кубики на предмет запуска и вызывай его в cron каждые 5 минут.

Evgueni ★★★★★ ()
Ответ на: комментарий от D3306

man systemd.timer; среди прочего там есть RandomizeDelay.

dexpl ★★★★★ ()
Ответ на: комментарий от D3306

Тогда реализуй вариант crutch_master’а из первого коммента.

dexpl ★★★★★ ()

каждый день в 12 запускай процесс, который выберет случайное время и создаст новую одноразовую cron-задачу, которая уже и выполнит твою команду

Egor_ ()
Ответ на: комментарий от crutch_master

Мне иногда бывает надо, чтобы скрипт не отработавший в определённое время запустился когда я включил комп. Ставлю я себе один скрипт на 12ночи, но вырубил комп и включил только утром и он не отработал. А надо, чтобы да. Приходится писать второй скрипт и проверять, сработал ли первый?

ChekPuk ★★★ ()

Выбрал как советовал crutch_master 0 0 * * * sleep $(( RANDOM \% 21600 )); /path/to/script.sh

Всех благодарю!

D3306 ()
Ответ на: комментарий от ChekPuk

Скрипту надо записывать время последнего срабатывания и завершаться если сегодня скрипт уже выполнялся. Запускать по крону в 12 ночи и при запуске пеки.

crutch_master ★★★★★ ()
Ответ на: комментарий от D3306

У RANDOM распределение кривое получится. Чаще будет срабатывать раньше.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Примерно так и делаю. Но можно усложнить условия, нужно начать делать бэкап, убедившись, что никто ничего уже/ещё не делает и если ещё сегодня не делал бэкап с 0:0 до 7:0. Да и много ситуаций можно придумать которые каждый раз надо велосипедить. А если бы в кроне были более продвинутые границы, то одним велосипедом было бы меньше.

ChekPuk ★★★ ()
Ответ на: комментарий от D3306

$RANDOM выдаёт число в диапазоне 1 - 32767. Оно условно-равномерно распределено, т.е. на дистанции вероятность для каждого числа одинаковая. И тут мы делаем $RANDOM % 21600. Ясное дело, что при одинаковой вероятности получения 1 и 21601 в $RANDOM мы получаем на выходе всё от 1 до 11167 с двойной вероятностью. Данный костыль сглаживает эту неточность, в таком случае вероятность появления какого-то диапазона не больше на 1/8 от остальных.
Как работает: (($RANDOM % 4320) * 5) выдаёт все тоже число в диапазоне 5 - 21600, но и интервалом 5 (т.е. 5, 10, 2015, 4080 и т.д), ($RANDOM % 5) сглаживает это интервал, чтобы получилось нормальное радномное число 0 - 21600
fix: надо отнимать: $(( (($RANDOM % 4320) * 5) - ($RANDOM % 5) ))

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)

anacron не рассматривали ?
В нём есть и RANDOM_DELAY, и запуск пропущенных задач при включении компьютера.

spirit ★★★★★ ()
Ответ на: комментарий от spirit

Честно говоря нет. По возможности всегда стараюсь обойтись без установки дополнительного по.

D3306 ()
Ответ на: комментарий от crutch_master

Как оказалось это не работает под openwrt. Задание просто запускается и выполняется в заданное время без задержки. Наткнулся на варианты с использованием awk, но при его использовании есть закономерности: пауза не была больше 1 часа, пауза при повторном выполнении задания всегда была меньше 50 минут. Каким еще способом можно воспользоваться?

D3306 ()
Ответ на: комментарий от D3306

Как оказалось это не работает под openwrt.

Какая там оболочка? Есть доступ к терминалу?

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master
OpenWrt /root # echo $SHELL
/bin/ash

Есть доступ к терминалу?

Не понял. Есть ssh и веб-морда.

D3306 ()

У меня использовалось такое решение:

Cron периодически запускает специальный скрипт.

А скрипт уже сам проверяет timestamp на файле в /var/… и запускает команду если нужно.

wandrien ()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от D3306
od -An -N2 -i /dev/urandom | sed "s/\s//g"

Вот это должно дать рандом от 0 до 65535 на ash
Я хз, как его подставить на ash, тестируй в ssh, смотри что получится. Типа

echo $(/path/to/random/script)
Если всё ок, ставь это же в крон. А лучше сразу в этот свой /path/to/script.sh

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 2)
Ограничение на отправку комментариев: только для зарегистрированных пользователей