io.. sarà e xtend Keith Thompson risposta:
La sua soluzione funziona perfettamente per ogni 5 minuti, ma non funzionerà per, diciamo, ogni 13 minuti; se usiamo $minutes % 13
otteniamo questo programma:
5:13
5:26
5:30
5:52
6:00 because 0%13 is 0
6:13
...
sono sicuro che si nota il problema.Siamo in grado di realizzare qualsiasi frequenza se contiamo i minuti (, ore, giorni o settimane) dal Epoch:
#!/bin/bash
minutesSinceEpoch=$(($(date +'%s/60')))
if [[ $(($minutesSinceEpoch % 13)) -eq 0 ]]; then
php [...]
fi
date(1)
rendimenti data corrente, abbiamo formattarla in secondi dall'Epoca (%s
) e poi facciamo la matematica di base :
# .---------------------- bash command substitution
# |.--------------------- bash arithmetic expansion
# || .------------------- bash command substitution
# || | .---------------- date command
# || | | .------------ FORMAT argument
# || | | | .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command
# || | | | |
# ** * * * *
$(($(date +'%s/60')))
# * * ---------------
# | | |
# | | ·----------- date should result in something like "1438390397/60"
# | ·-------------------- it gets evaluated as an expression. (the maths)
# ·---------------------- and we can store it
E si può utilizzare questo approccio con, giornaliera o oraria cron jobs mensili sulla OpenShift:
#!/bin/bash
# We can get the
minutes=$(($(date +'%s/60')))
hours=$(($(date +'%s/60/60')))
days=$(($(date +'%s/60/60/24')))
weeks=$(($(date +'%s/60/60/24/7')))
# or even
moons=$(($(date +'%s/60/60/24/656')))
# passed since Epoch and define a frequency
# let's say, every 7 hours
if [[ $(($hours % 7)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
Noti ce ho usato l'operatore -ne
(non uguale) per uscire dallo script invece di usare l'operatore -eq
(uguale) per avvolgere lo script nella costruzione IF; Lo trovo a portata di mano.
E ricordarsi di utilizzare la cartella .openshift/cron/{minutely,hourly,daily,weekly,monthly}/
corretta per la frequenza.
La risposta di cui sopra è sbagliata ed esegue ogni minuto di minuto 50-59. Quindi il cambiamento sarebbe il condizionale a "se [$ (($ minuto% 5)) -eq 0], quindi" e funziona. Per qualche motivo la mia modifica è stata respinta. Quindi, sto solo lasciando la risposta corretta nel commento. L'autore o qualcuno si sentono liberi di modificare la risposta con questa affermazione. – theshadowmonkey
@theshadowmonkey: Fatto. Grazie per averlo capito. Ho incluso diverse alternative (che potrebbero essere eccessive). –
@theshadowmonkey quando si utilizza if [$ (($ minute% 5)) -eq 0]; poi ottengo errore: 08: valore troppo grande per base (il token di errore è "08") –