Cronjob: Iterate attraverso i file


0

Voglio scorrere un elenco di script di bash con un cron-job. Cioè ogni due ore voglio iniziare un altro script bash. La mia idea era quella di impostare una nuova variabile d'ambiente, ogni volta che lo script cronjob legge questa variabile d'ambiente e chiama lo script corrispondente e incrementa la variabile d'ambiente.

Ho provato questo, e funziona se chiamo test.sh dal terminale.

# test.sh
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER
export JOB_COUNTER=$JOB_COUNTER

Se lo metto, chiamalo da dentro crontab, $JOB_COUNTER non sembra essere incrementato (lo controllo con echo $JOB_COUNTER )

Contesto: desidero aggiungere 50 nuovi lavori al nostro cluster ogni due ore, perché se invii tutti i lavori insieme, lo scheduler avvia troppi lavori in parallelo e la maggior parte dei timeout perché l'I / O è troppo lento. Se un cronjob non è quello che si vorrebbe usare, sono aperto ad altre idee.


Non sarebbe più semplice scrivere un semplice script Python (o anche shell), che esegue solo l'elenco? Basta fare un sleep () nello script - che non richiede tempo di CPU.
jcoppens

Dove inizializzi JOB_COUNTER? Inoltre, ricorda che cron crea una nuova shell per ogni esecuzione. È necessario rendere persistente JOB_COUNTER, e. g. scrivilo all'utente di cron .bashrc.
bjanssen

Risposte:


0

ogni test.sh chiamato da cron è un nuovo processo, quindi la variabile environnement viene eliminata.

Provare

# test.sh
JOB_COUNTER=$(< $HOME/jobcounter.txt )
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER > $HOME/jobcounter.txt
echo $JOB_COUNTER
# JOB_COUNTER can be used here 

fai attenzione che non puoi usare JOB_COUNTER nella chiamata alla shell a meno che test.sh non sia di origine ( . ./test.sh )

dovrai inizializzare e resettare $HOME/jobcounter.txt

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.