The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения только ответов первого уровня [ Отслеживать ]

Оглавление

Раздел полезных советов: Случайная задержка в shell-скрипте, выполняемом из crontab, auto_tips (??), 27-Июл-22, (0) [смотреть все] +3

Сообщения [Сортировка по времени | RSS]


1. "Случайная задержка в shell-скрипте, выполняемом из crontab"  +2 +/
Сообщение от Аноним (1), 27-Июл-22, 14:45 
Чего только люди не придумают, чтобы jot не ставить
Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

2. "Случайная задержка в shell-скрипте, выполняемом из crontab"  +15 +/
Сообщение от grayich (ok), 27-Июл-22, 14:52 
sleep $((RANDOM % 3600)) 
sleep $(shuf -i 1-3600 -n 1)
sleep $(perl -e 'print rand(3600)')
sleep $(python -c 'import random; print(random.randint(1,3600))')
и ещё десяток более коротких вариантов, в зависимости от системы и имеющихся утилит
трудно найти систему в которой есть od, bc и при этом нет продвинутого шела, shuf, perl, python и порочего
Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

8. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +4 +/
Сообщение от OpenEcho (?), 28-Июл-22, 11:58 
Plain C:
```
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void main () {
  srand(time(NULL));
  int r = rand() % 3600;
  printf("\nSleeping for %d seconds\n", r);
  sleep(r);
}
```

Go: (go build -ldflags "-s -w" this_source.go) << будет работать везде т.к. статика
```
package main

import "fmt"
import "math/rand"
import "time"

func main() {
    rnd := time.Now().UTC().UnixNano()
    rand.Seed(rnd)
    rs  := rand.Intn(3600)
    fmt.Println("Sleeping for: ",rs," second(s)")
    time.Sleep(time.Duration(rs) * time.Second)
}
```


Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

9. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +3 +/
Сообщение от OpenEcho (?), 28-Июл-22, 12:05 
#!/bin/sh
sleep $(echo "select abs(random()%3600);" | sqlite3)
Ответить | Правка | Наверх | Cообщить модератору

10. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  –1 +/
Сообщение от Аноним (-), 28-Июл-22, 17:46 
гыг, это типа как суть плоского анекдота объяснять кому-то
Ответить | Правка | Наверх | Cообщить модератору

11. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +/
Сообщение от Аноним (11), 28-Июл-22, 23:24 
bc значит у него есть, а shuf нет... Вероятно, недоучили баш, недоучили шелл, недоучили всё. Но это не мешает радоваться изобретенному велосипеду и учить других.

Сама постановка задачи странная, если не сказать больше. Планировщик задач в принципе про точное время запуска. Задержку логично встроить в запускаемую программу. Кстати, зачем она? Если это с целью размазать нагрузку от массово стартующих скриптов, то логичнее обрабатывать их очередью, в лимитированное количество потоков. Это все тоже делается без всяких башизмов.
По крону стартуете runner.sh, внутри которого что-то вроде ls dir/with/scripts/*sh | xargs -L1 -P4 sh
Скриптам можно дать имена типа 00-first-prio.sh 00-first-prio2.sh 10-second-prio.sh и так далее.

Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

13. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +2 +/
Сообщение от Аноним (11), 28-Июл-22, 23:47 
`echo 3600 '*' $(od -An -N2 -i /dev/urandom) / 65536 | bc`

Решение на od | bc, так сказать, облегченное (:

Еще раз - кто не умеет, тот учит.

Ответить | Правка | Наверх | Cообщить модератору

29. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +3 +/
Сообщение от ABATAPA (ok), 03-Авг-22, 20:47 
root@OpenWrt:~# od
-ash: od: not found
root@OpenWrt:~# bc
-ash: bc: not found
root@OpenWrt:~# sh --version


BusyBox v1.33.2 (2022-02-16 20:29:10 UTC) built-in shell (ash)

root@OpenWrt:~# SEED=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | md5sum | sed 's/[a-f]//g' | cut -c1-10)
root@OpenWrt:~# expr $SEED % 90
38
root@OpenWrt:~# SEED=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | md5sum | sed 's/[a-f]//g' | cut -c1-10)
root@OpenWrt:~# expr $SEED % 90
75

Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

30. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +4 +/
Сообщение от aa (?), 04-Авг-22, 06:47 
man 5 crontab

...
The RANDOM_DELAY variable allows delaying job startups by random
amount of minutes with upper limit specified by the variable.
- всё уже придумано

Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

35. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  –2 +/
Сообщение от бублички (?), 07-Авг-22, 20:35 
> dd if=/dev/urandom bs=1 count=4 status=none | od -t u4 | head -1 | cut -c 8-

до чего уродливая конструкция. впрочем чего можно ожидать от очередного Дениса Попова, что даже погуглить не умеет чтоб отыскать к примеру: od -vAn -N2 -tu4 < /dev/urandom

Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

45. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +4 +/
Сообщение от snarkxemail (?), 12-Авг-22, 07:53 
А ведь где-то для этого используют jvm, и обязательно, обязательно Spring Boot.

Или не энтерпрайзно

Ответить | Правка | Наверх | Cообщить модератору

50. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +/
Сообщение от pavlinux (ok), 02-Сен-22, 20:06 
Баян  https://www.opennet.ru/openforum/vsluhforumID9/9132.html

>  R0=`dd if=/dev/urandom bs=1 count=4 status=none | od -t u4 | head -1 | cut -c 8-`; sleep `echo "scale=0;" $R0 % 3601 | bc`

Нихуа засрал консоль. Для чего столько хлама?


sleep "$(($(date +%s) % 3601))" &

Если чо, обратные кавычки - `` - это тоже бaшизм и ваще не POSIX, не SUS не IEEE
Ну точнее юзать можно, но более старые POSIX рекомендуют $( .... )
https://pubs.opengroup.org/onlinepubs/007904875/utilities/xc...

echo -> printf, сut, od,  bs и head ваще дико зависят от консоли, локали и байтовости

В NetBSD/PPC c  локалью UTF-32BE, твоя шняга не сработает.  

> цель: чтобы вписать простую строку в crontab ... но при этом иметь случайное начало работы

А в башке придумать число от 0 до 3600 не судьба?
Если туго, то впиши текущее время минус 11 часов, а в минуты допиши сколько сейчас секунд. :D


Учим маны, Bash Advanсed Scripting Guide и POSIX IEEE Std 1003.1™-2017  наизусть.

Ответить | Правка | Наверх | Cообщить модератору
есть ответы, показать

55. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +/
Сообщение от playnet (ok), 26-Сен-22, 12:38 
"крон без башизмов" на мега башизме.
Жаль, нельзя минус заметке поставить.

ЗЫ google: RANDOM_DELAY

Ответить | Правка | Наверх | Cообщить модератору

69. "Случайная задержка в shell-скрипте, выполняемом из crontab (без башизмов)"  +/
Сообщение от qwas (??), 26-Дек-22, 15:05 
sleep $(($$%3600))
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру