$RANDOM i cron [LØST]
Jeg har et irriterende problem med et random cronjob. Jeg vil udføre en kommando et tilfældigt antal minutter efter cronjobbet fyrer.
Dette virker direkte i terminalen og udfører kommandoen forsinket mellem 0 og 30 sekunder (erstat kommando med et vilkårligt program, fx echo):
Hvis den derimod står i crontab, fyrer den altid med det samme, uden forsinkelse:
Bruger jeg et udtryk uden $RANDOM virker det til gengæld fint:
Ovenstående forsinker kommandoen 15 sekunder.
Altså ser det ud tll at $RANDOM ikke virker og får hele udtrykket til at blive nul.
Men det er ikke fordi $RANDOM simpelthen evaluerer til 0 i cron, får så skulle dette give en forsinkelse på 10 sekunder:
Hvad pokker sker der?
Dette virker direkte i terminalen og udfører kommandoen forsinket mellem 0 og 30 sekunder (erstat kommando med et vilkårligt program, fx echo):
sleep `expr $RANDOM \% 30` ; kommando
Hvis den derimod står i crontab, fyrer den altid med det samme, uden forsinkelse:
* * * * * sleep `expr $RANDOM \% 30` ; kommando
Bruger jeg et udtryk uden $RANDOM virker det til gengæld fint:
* * * * * sleep `expr 10 + 5` ; kommando
Ovenstående forsinker kommandoen 15 sekunder.
Altså ser det ud tll at $RANDOM ikke virker og får hele udtrykket til at blive nul.
Men det er ikke fordi $RANDOM simpelthen evaluerer til 0 i cron, får så skulle dette give en forsinkelse på 10 sekunder:
* * * * * sleep `expr $RANDOM \% 30 + 10` ; kommando
Hvad pokker sker der?
Kommentarer9
Mine erfaringer med Cron
Put din forsinkelse i et
#2: det vil selvfølgelig
#1 bud er en mulighed jeg vil undersøge, men jeg tror det dog ikke da mit sidste eksempel vel så vil evaluere til 10?
kald dev random
Problemet er at du formenteligt eksekvere i en dash og ikke bash shell samt at det ikke er en login shell så env variabler bliver ikke sat.
je mener at $RANDOM er en bash udvidelse og ikke en del af possix men jeg er ligeså forvirret som alle andre når det kommer til de forskellige shell's syntaxer.
Edit:
du behøver ikke bruge en subshell "$(" du kan nøjes med (expr `od -An -N1 -i /dev/urandom` % 30)
Super, #4 virker! Man skal
Så det må altså være fordi systemvariabler ikke virker i cron, som I er inde på.
Det mærkelige er blot at jeg fandt ideen her: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/ hvor der netop bruges $RANDOM i cron. Men det kan jo være distro-afhængigt.
forklaringen
#6:
SHELL=/bin/sh
SHELL=/bin/sh
dash or bas
fortolkere
Den peger på dash. Dash har