LinuxForum.Fans
Тема

Cron & random

Автор: sesh911 9 сообщений 1857 просмотров
#83924

Всем привет, а подскажите пож-ста, почему если писать в терминале $(($RANDOM%60))m
то работает нормально, а если в кроне выполнить след. задание

text
#!/bin/sh
echo $(($RANDOM%60))m >> /home/user/test.txt

значение получается всегда одно и то же?

#83932

потому, что в cron'е совсем другое окружение. точнее - никакого. вот каждый раз по новой и считает.

ЗЫЖ а что значит эта накрученная конструкция???

#83934

Это для примера, вообще мне надо рубить один процесс в разное время (например с 11 до 12), а для теста - просто вывожу в файл полученное значение, а как прописать правильно?

#83940

забыл сказать что делать :)
инициализировать:
[console]RANDOM=`cat /dev/urandom | hexdump -n2 -d | sed -r '1{s/[^ ]+ +//; q}'`[/console]

#83941

Блин, спасибо, такое написать - фиг додумаешься...

#83942

можно вообще без RANDOM - моя конструкция даёт 0...65535, а RANDOM 0...32768
вам надо от 0 до 59?
тогда:

text
echo $(( `cat /dev/urandom | hexdump -n2 -d | sed -r '1{s/[^ ]+ +//; q}'` % 60 ))
#83943
sesh911 написал:
такое написать - фиг додумаешься...

это обычная лень :( а ещё голод, я чё-то проголодался, вот и накатал по быстрому ;)

1) есть устройство /dev/urandom, оно даёт случайные байты, но нам нужны числа.
2) есть команда hexdump, она переводит байты в числа, для 2х байтов десятичных hexdump -n2 -d
3) получилось:
[console]$ cat /dev/urandom | hexdump -n2 -d
0000000 63589
0000002
[/console]
не совсем то.
читать маны было лень, и я просто вырезал первые непробелы и первые пробелы, и вывел что осталось:

text
sed -r '1{s/[^ ]+ +//; q}'

4) вот и всё - получилось число 0...65535

:)

#83945

поспешил - людей насмешил

Ошибся:
00123 воспринимается как восьмеричное число, потому начальные нули надо вырезать:

text
echo $((`cat /dev/urandom | hexdump -n2 -d | sed -r 's/[^ ]+ +0*//; q'` % 60))

ЗЫЖ странно, а я и не знал... оказывается восьмеричные числа под `кавычками` нельзя почему-то...

ЗЗЫЖ точнее можно, только восьмеричного числа 08 не бывает.

#83946

да, 2-й вариант работает без ошибок

Войдите или зарегистрируйтесь, чтобы ответить.