The OpenNET Project / Index page

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



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

"Раздел полезных советов: Случайная задержка в shell-скрипте, выполняемом из crontab"  +3 +/
Сообщение от auto_tips (??), 27-Июл-22, 14:45 
применимо в системах без anacron, без /etc/cron.[hourly|daily|weekly|monthly] и без systemd.

цель: чтобы вписать простую строку в crontab вида

   0 */8  * * * $HOME/bin/script.sh

но при этом иметь случайное начало работы (а не ровно 00:00, 08:00 и 16:00),
в начале script.sh нужно поместить

   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`

задержка будет случайная, равномерно распределённая в интервале от 0 до 3600 секунд.

URL:
Обсуждается: http://www.opennet.me/tips/info/3207.shtml

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

Оглавление

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

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

2. Сообщение от grayich (ok), 27-Июл-22, 14:52   +15 +/
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ообщить модератору
Ответы: #3, #5

3. Сообщение от Аноним (3), 27-Июл-22, 21:02   –1 +/
Это баш, кореутилс, перл, питон. В какой-нибудь фряхе tcsh вот и попробуй с ним сделать что-нибудь.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #4, #60

4. Сообщение от grayich (ok), 27-Июл-22, 22:41   +3 +/
в фряхе в базовой системе(из коробки) есть jot, как выше предлагали
jot -r 1 1 3600

сабж интересен с точки зрения задачки для ума, но в реальности .. такое себе
coreutils везде есть, awk везде есть
awk 'BEGIN{srand();print rand()*3600}'
если в системе есть od bc dd head cut то и предлагаемое скорее всего есть
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #48

5. Сообщение от john_erohin (?), 28-Июл-22, 04:37   +1 +/
> продвинутого шела,

я когда подавал эту заметку на модерирование, в заголовке специально
написал "без башизмов". но дорогая редакция не пропустила.
оскорбить боятся кого-то что ли.

перл и питон слишком жирные. можно обойтись без.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #6

6. Сообщение от grayich (ok), 28-Июл-22, 10:22   +3 +/
> написал "без башизмов". но дорогая редакция не пропустила.

идея была ясна, но имхо - чисто из теории
на практике нет смысла таких сложностей, да и те-же jot, shuf - не башизмы

> перл и питон слишком жирные. можно обойтись без.

да как сказать, задействованные утилиты:
91K /usr/bin/bc
39K /usr/bin/cut
67K /usr/bin/dd
39K /usr/bin/head
63K /usr/bin/od
итого: 299КБ

14К /usr/bin/jot
43K /usr/bin/shuf

687K /usr/bin/gawk

perl\python - обычно уже в системе есть, общий их размер конечно приличный, но выполняемый(вид из ps)
13364  7784 python -c import random; print(random.randint(1,3600)); input("")
10636  3796 perl -e print rand(3600);$i=<STDIN>

и тут вроде бы как 10-13 метров много, но те-же bc\head занимают по 6 метров в ps, что уже в сумме 12
так что по ресурсам perl\python в итоге ещё и экономнее будут - чем целый конвейер

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5 Ответы: #14

7. Сообщение от Аноним (7), 28-Июл-22, 10:54   +/
Люди про неё не знают.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #46

8. Сообщение от OpenEcho (?), 28-Июл-22, 11:58   +4 +/
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ообщить модератору
Ответы: #18, #67

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

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

11. Сообщение от Аноним (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ообщить модератору
Ответы: #17, #32

12. Сообщение от Аноним (12), 28-Июл-22, 23:46   +3 +/
>  Чего только люди не придумают, чтобы systemd не ставить

// fix

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #66

13. Сообщение от Аноним (11), 28-Июл-22, 23:47   +2 +/
`echo 3600 '*' $(od -An -N2 -i /dev/urandom) / 65536 | bc`

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

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

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

14. Сообщение от Аноним (-), 28-Июл-22, 23:52   +1 +/
Повесить в памяти жирный интерпретер, да еще с немеряными модулями/стдлибами чтобы задержку отмерять это конечно круто. Надо было не мелочиться и V8 для этого заюзать, чего уж там. Или JVM накрайняк. Иначе недостаточно энтерпрайзно.

Можно еще Менеджер Рандомных Задержек накодить, чтобы совсем хорошо. С гуем показывающим оставшееся время, кто клиенты, статистику всякую, аналитику задержек которой позавидует баба с календарем...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #15

15. Сообщение от john_erohin (?), 29-Июл-22, 06:33   +1 +/
> Можно еще Менеджер Рандомных Задержек накодить

systemd-randomdelayd.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #16

16. Сообщение от Аноним (-), 29-Июл-22, 13:13   +/
А может, просто man systemd.timer? Он умеет и это и намного больше :). Заодно крон можно отправить на свалку - в системде хотя-бы можно посмотреть активные таймеры ОДНОЙ командой. Сразу. Без велосипедизма. С кроном так почему-то не катит.

Зато можно написать очередной совет как делать из буханки хлеба троллейбус, "без использования гвоздей".

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #27

17. Сообщение от OpenEcho (?), 29-Июл-22, 16:01   +/
Многие дистрибутивы делают рэндомный запуск скриптов апдейта, чтобы уменшить ударную нагрузку от массы клиентов
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #19

18. Сообщение от Аноним (18), 29-Июл-22, 16:14   +/
> srand(time(NULL))

Это точно нормальный вариант? У десятка задач будет одинаковое время запуска (с точностью до секунды)... и одинаковый random seed...
Тогда уж лучше getpid().

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #20

19. Сообщение от Аноним (11), 29-Июл-22, 17:00   –3 +/
Значит им тоже надо головой подумать и понять, что рандомные задержки проблему не решают.
Что если апдейт одного из пакетов может в одиночку нагрузить систему? Так не бывает - скажут они, и добавят, что если даже это так, то пусть себе всё тормозит.
Когда-то кто-то скостылил, а теперь так делают все и вроде как это стало правильным способом? Ну-ну.

Или как я уже написал - лимитировать запуск процессов, запуская их по очереди, или запускать их в cgroup, в которой они будут получать ресурсы по квоте (этот вариант наверно самый лучший). nice точно везде есть.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #21, #33, #62

20. Сообщение от OpenEcho (?), 29-Июл-22, 18:10   +/
>> srand(time(NULL))
> Это точно нормальный вариант?

Точно:

> srand(time(NULL));

makes use of the computer's internal clock to control the choice of the seed.  Since time is continually changing, the seed is forever changing.  Remember, if the seed number remains the same, the sequence of numbers will be repeated for each run of the program.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18 Ответы: #24

21. Сообщение от OpenEcho (?), 29-Июл-22, 18:16   –1 +/
> Значит им тоже надо головой подумать и понять, что рандомные задержки проблему
> не решают.

Неправда, разгружает и очень прилично

> Что если апдейт одного из пакетов может в одиночку нагрузить систему?

Разгружает загрузку на сервера которые предоставляют апдейты, причем здесь клиенты и как долго они будут процессировать полученный апдэйт? Смысл в том чтоб предотвратирь ДДоС серваков, если все однаразово ломануться качать

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #22

22. Сообщение от Аноним (22), 29-Июл-22, 19:59   –1 +/
А, вы про это. Что будет, если клиенты отключат задержку, чтобы получить обновления раньше?
Понятно что - перегруженная инфраструктура будет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #23, #63

23. Сообщение от OpenEcho (?), 29-Июл-22, 21:11   +/
> А, вы про это. Что будет, если клиенты отключат задержку, чтобы получить
> обновления раньше?

Все сразу и все выставят одно и то же время? По моему это очень маленькая вероятность...

Можно конечно сделать как мелкософт и рулить централизованно, но тогда - "Прощай свобода..."

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

24. Сообщение от Аноним (24), 30-Июл-22, 00:28   +/
Ну вот запустил крон 10 штук процессов в одну и ту же секунду. Все 10 процессов выполнили time и получили одинаковое значение. И у всех процессов будет одинаковый начальный random seed (например, у меня сейчас 1659129796). И все 10 потом стартанут через одинаковую паузу...

Точно надо было этого добиться?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #25, #26

25. Сообщение от OpenEcho (?), 30-Июл-22, 13:48   –1 +/
> Ну вот запустил крон 10 штук процессов в одну и ту же
> секунду.

Можно ткуть в ту самую строчку, где в тех.задании сказанно про число 10?
ОП, хочет запускать ОДИН шел скрипт. Не надо придумывать то, что не спрашивали и не надо быть телепатом, чтоб угадать наперед все что можно случиться, - это первое правило в любом серьезном бизнесе - "делай то, что сказанно". Нужна функция случайной задержки в пределах заданного времени, В СКРИПТЕ шела, чтобы запустить что-то позже, опять же, что то "ОДНО". Все. Одноразово.

О каких 10 процессах речь? Зачем усложнять там, где это - НЕ НУЖНО


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

26. Сообщение от Аноним (26), 30-Июл-22, 16:54   –1 +/
Про 10 параллельно запускаемых задач нет ни слова. Это была моя попытка проиллюстрировать почему решение получилось не очень на конкретном примере. Неудачная попытка.

В решении (и в задании) ОПа написано
> Случайная задержка в shell-скрипте
> задержка будет случайная

У тебя получилась скорее РАЗНАЯ (и при этом ПРОГНОЗИРУЕМАЯ, тов. майор) задержка, но не СЛУЧАЙНАЯ! Можно достаточно точно предсказать в какое время каждый день скрипт будет отрабатывать. Так себе случайность, на месте ОПа я бы твоё решение не принял и отправил на доработку как несоответствующее заданию.
А вот на месте тов. майора федеральной службы - всячески бы топил за твой вариант.

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

27. Сообщение от john_erohin (?), 30-Июл-22, 21:34   +2 +/
> в системде хотя-бы можно посмотреть активные таймеры ОДНОЙ командой.

таймер в системе один, это системные часы, их cron и смотрит.

все начинается с нестандартной терминологии, а заканчивается переходом отработавшего задание агента влияния к своему настоящему хозяину.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16 Ответы: #28, #61

28. Сообщение от Аноним (28), 31-Июл-22, 17:25   +/
В системде есть юниты с типом .timer и их в типовом случае таки более одного. Это очень логичное название т.к. описывает что оно делает и как себя ведет. И кроме всего прочего там достаточно фич чтобы заодно описать и вон ту хотелку, без изобретения велика с квадратными колесами самому.

> все начинается с нестандартной терминологии, а заканчивается переходом
> отработавшего задание агента влияния к своему настоящему хозяину.

Как по мне системд может и агент влияния, конечно, но влияет он сугубо на мои системы, и делает то что я скажу. А раз так - это хороший и правильный агент. И уж всяко лучше вон тех, с гамном и палками. Потому что попадет кому такая система - и они вообще не в курсе что за плюхи там по скриптам рассованы. Хотя бэкдоры так прятать наверное удобно, поди там разберись в этом кастоме - надо вон то или нет. Мало кто в этом месиве еще и осмысленно копаться будет.

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

29. Сообщение от ABATAPA (ok), 03-Авг-22, 20:47   +3 +/
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ообщить модератору
Ответы: #38

30. Сообщение от aa (?), 04-Авг-22, 06:47   +4 +/
man 5 crontab

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #31, #36

31. Сообщение от Аноним (31), 04-Авг-22, 10:41   +1 +/
не мешай человек НЕ читать маны и изобретать велосипеды
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30

32. Сообщение от gapsf2 (ok), 04-Авг-22, 15:15   +/
> ls dir/with/scripts/*sh | xargs -L1 -P4 sh

https://mywiki.wooledge.org/BashPitfalls#Using_xargs_without_-0
http://mywiki.wooledge.org/ParsingLs
https://mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_....
https://unix.stackexchange.com/questions/128985/why-not-pars...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #34

33. Сообщение от Kuromi (ok), 05-Авг-22, 15:30   +1 +/
Вспомните что происходит когда условная Убунта релизит новый выпуск - серверы пусть и не лежат, но ощутимо перегружены. Умные чукчи сами ждут недельку, если не ностальгируют по дайлапу
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19

34. Сообщение от Аноним (11), 05-Авг-22, 23:35   +/
Любители засирать шелл-скрипты бессмысленными флажками такие любители. Лишь бы пять копеек вставить. Скрипты в папку кладет администратор, он же дает имена файлам. Администратор-дебил создаст файл с именем, часть которого превратится в команду? Кстати, сможешь составить такое имя файла? Или как всегда, лишь бы квакнуть?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #52

35. Сообщение от бублички (?), 07-Авг-22, 20:35   –2 +/
> 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ообщить модератору
Ответы: #37

36. Сообщение от john_erohin (?), 08-Авг-22, 11:20   +3 +/
devuan:
$ man 5 crontab | grep -i RANDOM_DELAY | wc -l
0

cygwin: то же самое.

вангую: у вас не викси крон, а его имитация от линуса поттера.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #51, #65

37. Сообщение от john_erohin (?), 08-Авг-22, 11:24   +/
ваша конструкция почему-то не способна выдать больше чем 65535.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #39, #40, #41

38. Сообщение от john_erohin (?), 08-Авг-22, 11:29   +/
> md5sum | sed 's/[a-f]//g'

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29 Ответы: #47

39. Сообщение от vodz (ok), 08-Авг-22, 13:03   +1 +/
Ну надо -N4, да и для scale=0 bc не надо:
R=`od -vAn -N4 -tu4 < /dev/urandom`
sleep `expr $R % 3601`
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37

40. Сообщение от Аноним (11), 08-Авг-22, 13:15   +/
Для практических нужд это запредельно много.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37

41. Сообщение от бублички (?), 09-Авг-22, 15:17   +3 +/
в задании итого меньше требовалось (от 0 до 3600)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #42

42. Сообщение от john_erohin (?), 09-Авг-22, 15:43   –3 +/
>  в задании итого меньше требовалось

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

потребоваться может от 3 до 9000000

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #44, #56

44. Сообщение от бублички (?), 09-Авг-22, 17:00   +2 +/
>>  в задании итого меньше требовалось
> свою нетленку вы пишете так же ? шаг вправо-влево считается побег, попытка
> подумать - провокация.
> потребоваться может от 3 до 9000000

довольно странный вы гражданин. сначала публикуете нечто пионерско-босоногое (типа cat <file1>|grep <string>|head -1|cut -c8|sort|uniq|echo > <file2>), потом обижаетесь на критику и начинаете придираться выдумывая то чего изначально не было. снова и вновь - инфантильно и невежественно

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

45. Сообщение от snarkxemail (?), 12-Авг-22, 07:53   +4 +/
А ведь где-то для этого используют jvm, и обязательно, обязательно Spring Boot.

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

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

46. Сообщение от A (?), 17-Авг-22, 19:23   +/
Ведь из примитивов можно всё соорудить быстро. Остальное интересно, полезно, нужно, но необходимости нет. Т.к. из примитивов соорудить можно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7

47. Сообщение от ABATAPA (ok), 23-Авг-22, 12:26   +1 +/
А зачем равномерность распределения при организации задержки?!  :-D
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38 Ответы: #49

48. Сообщение от _ (??), 23-Авг-22, 20:10   +4 +/
В опёнке в самом crontab(5) заложен функционал случайного времени выполнения команды
=========
A random value (within the legal range) may be obtained by using the ‘~’ character in a field. The interval of the random value may be specified explicitly, for example “0~30” will result in a random value between 0 and 30 inclusive. If either (or both) of the numbers on either side of the ‘~’ are omitted, the appropriate limit (low or high) for the field will be used.
========
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #59

49. Сообщение от john_erohin (?), 25-Авг-22, 08:16   +/
а затем чтобы задержки от всех локалхостов были равномерно распределены в заданном интервале,
а не разбивались на 15 кластеров (ГПСЧ от IBM давал такой эффект).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47

50. Сообщение от pavlinux (ok), 02-Сен-22, 20:06   +/
Баян  https://www.opennet.me/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ообщить модератору
Ответы: #70

51. Сообщение от Аноним (52), 23-Сен-22, 04:42   +/
У меня есть такая строчка в мане от cronie, который вроде бы форк викси крона, на что прозрачно намекает подпись Paul Vixie ⟨vixie@isc.org⟩ в этом же мане. Но греп её там не находит, так что больше смахивает на проблему с командой поиска.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #53

52. Сообщение от Аноним (52), 23-Сен-22, 15:32   +/
Администратор тоже человек и может ошибиться. Я уже сталкивался с тем, что кастомный джоб где-то не запускался. В содержании (простенький шелл скрипт) или имени не было ничего подозретельного (файл назывался, условно, /etc/cron.daily/run.foo). После долгих поисков проблем со всеми сервисами оказалось, что файлы из cron.daily дебиан пропускает через велосипед по имени run-parts, который не принимает т.о.ч.к.и в именах и наш сервис это животное просто игнорировало.

А вроде бы все опытные, строго аски, без пробелов.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #34 Ответы: #64

53. Сообщение от john_erohin (?), 24-Сен-22, 12:02   +/
или проблемы с маном.

тогда так:
$ strings `which cron` | grep -i RANDOM_DELAY | wc -l
0

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51 Ответы: #54

54. Сообщение от Аноним (52), 25-Сен-22, 12:48   +1 +/
Минутка занудства, раз мы тут учим правильно башскриптить: wc -l с грепом не нужен, он уже сам умеет считать количество совпадений (grep -c RANDOM_DELAY). У тебя там ноль может быть ещё из-за того, что выполняемый бинарник называется crond.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #53 Ответы: #57

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

ЗЫ google: RANDOM_DELAY

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

56. Сообщение от playnet (ok), 26-Сен-22, 12:41   +/
кому может?
В часе 3600 секунд, всё остальное - влажные юношеские фантазии.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42 Ответы: #58

57. Сообщение от john_erohin (?), 26-Сен-22, 13:18   +/
> может быть ещё из-за того, что
> выполняемый бинарник называется crond.

я не совсем ламер, этот вариант заранее проверил и отверг.

также ldd /usr/sbin/cron не показывает никаких cron-специфичных библиотек,
которые стоило бы проверять.

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

58. Сообщение от john_erohin (?), 26-Сен-22, 13:20   +/
> В часе 3600 секунд, всё остальное - влажные юношеские фантазии.

возможно я захочу размазать задержку на неделю. или месяц (больше уже нет смысла).

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

59. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:00   +2 +/
Занятно, хорошо бы потырить.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #48

60. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:00   +/
Так-то head(1), cut(1) и куча других форков в предложенном варианте -- тоже coreutils; если бы оказался заперт на дебиане и таких кроновых заданий было бы [по контейнерам/виртуалкам] достаточно много/часто, ну или по красоте -- то форкнул бы уже какой-нить лёгкий bash (а на альте /bin/sh и есть лёгкий баш без readline и всего прочего).

Но всяко спасибо :)

PS: у меня как-то была обёртка для другого варианта применения -- когда на ноуте охота гонять всякие updatedb, но точно не на батарейке и совсем в фоне; вдруг кому пригодится: http://packages.altlinux.org/idlewrap

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

61. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:02   +1 +/
> все начинается с нестандартной терминологии, а заканчивается переходом отработавшего
> задание агента влияния к своему настоящему хозяину.

Слушайте, давайте как-нить встретимся живьём.
Хочу пожать руку.

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

62. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:05   +1 +/
> Значит им тоже надо головой подумать и понять, что рандомные задержки проблему
> не решают. Что если апдейт одного из пакетов может в одиночку нагрузить систему?

Ну вот и подумайте.  Что речь может идти вообще не о localhost, а об удалённой стороне (как каналах, так и iops при том).  Что и на localhost могут ринуться жрать диск десятки или сотни VE/VM...

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

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

63. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:06   –1 +/
> Что будет, если клиенты отключат задержку, чтобы получить обновления раньше?

never underestimate the power of the default (c) Malx

...тем более когда речь об убунте (ц) я

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

64. Сообщение от Michael Shigorinemail (ok), 09-Окт-22, 13:07   +/
> После долгих поисков проблем со всеми сервисами оказалось, что файлы из
> cron.daily дебиан пропускает через велосипед по имени run-parts, который не принимает
> т.о.ч.к.и в именах и наш сервис это животное просто игнорировало.

Багу-то повесили, чтоб хоть в логи внятно ругалось?

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

65. Сообщение от sshutdown0w (?), 15-Ноя-22, 14:59   +/
вот для FreeBSD  
  -j    jitter
         Enable time jitter.  Prior    to executing commands, cron will sleep
         a random number of    seconds    in the range from 0 to jitter.    This
         will not affect superuser jobs (see -J).  A value for jitter must
         be    between    0 and 60 inclusive.  Default is    0, which effectively
         disables time jitter.

         This option can help to smooth down system    load spikes during mo-
         ments when    a lot of jobs are likely to start at once, e.g., at
         the beginning of the first    minute of each hour.

     -J    rootjitter
         Enable time jitter    for superuser jobs.  The same as -j except
         that it will affect jobs run by the superuser only.

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

66. Сообщение от Аноним (66), 19-Ноя-22, 15:23   +/
Придумывали и будем придумывать, чтобы эту какашку не ставить.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

67. Сообщение от Аноним (66), 19-Ноя-22, 15:26   +/
Нафига козе этот баян, если такое простое действо можно/нужно на скриптоте?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #68

68. Сообщение от OpenEcho (?), 20-Ноя-22, 13:17   +/
> Нафига козе этот баян, если такое простое действо можно/нужно на скриптоте?

Есть такое слово  "независимость",  - гарантия того, что код не сломается с годами, как в примере питон2->питон3 ;)

Хотя для ОП случая вполне достаточно

<code>
    echo $(($RANDOM %3600))
</code>

на не секьюрных машинах

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

69. Сообщение от qwas (??), 26-Дек-22, 15:05   +/
sleep $(($$%3600))
Ответить | Правка | Наверх | Cообщить модератору

70. Сообщение от Алексей (??), 24-Июл-23, 18:07   +/
Тема "кто виноват" раскрыта.
А предложения "что делать" некорректны, ибо скрипт с предложенными конструкциями, растиражированный на несколько машин, будет начинать активную работу везде одновременно. Хоть с командой date, хоть с константой из башки.
Возражение, что про несколько машин в задании не упомянуто, не принимается, т.к. скрипты с форума априори обречены на многократное тиражирование.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50


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

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




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

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