Domanda

Come posso impostare un cronjob che viene eseguito ogni 25 ore?

È stato utile?

Soluzione

Solo un'ipotesi, ma don't

Meglio hackerare la parte superiore della mia testa: scrivere uno script per tenere traccia dell'ultima volta che è stato eseguito ed eseguirlo condizionalmente se è stato più di 25 ore fa.

Cron quello script driver da eseguire ogni ora.

Altri suggerimenti

Sarebbe più semplice emettere un at comando che specifica l'ora e la data del lavoro successivo quando si avvia quello corrente ma è possibile simularlo con un cronjob aggiornando la voce cronjob per il processo all'inizio dell'esecuzione corrente (non alla fine, quindi dovresti prendere in considerazione il tempo per eseguire il lavoro).

Imposta un lavoro orario e controlla nel tuo script se sono trascorse 25 ore con questo snipnet:

if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then
 your script 
fi

Puoi ottenere qualsiasi frequenza se conti le ore (, minuti, giorni o settimane) da Epoch , aggiungi una condizione nella parte superiore dello script e imposta l'esecuzione dello script ogni ora sul tuo crontab:

#!/bin/bash

hoursSinceEpoch=$(($(date +'%s / 60 / 60')))

# every 25 hours
if [[ $(($hoursSinceEpoch % 25)) -ne 0 ]]; then
    exit 0
fi

date (1) restituisce la data corrente, noi formattarlo come secondi dall'epoca (% s ) e quindi facciamo 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 puoi usare questo approccio con cron job minuti, orari, giornalieri o mensili:

#!/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 13 days

if [[ $(($days % 13)) -ne 0 ]]; then
    exit 0
fi

# and your actual script starts here

È possibile utilizzare i comandi 'sleep' o 'watch' per eseguire uno script in un ciclo. Assicurati solo che lo script sia eseguito.

Penso che dovresti provare questo

0 */25 * * * ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top