Installazione di crontab usando bash script


11

Ho creato uno script per installare due script sul crontab.

#!/bin/bash

 sudo crontab -l > mycron
 #echo new cron into cron file

 echo "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh" >> mycron #schedule the delete script
 echo "*/12 * * * * bash  /mnt/md0/capture/merge_pcap.sh" >> mycron     #schedule the merge script

#install new cron file
 crontab mycron
rm mycron

Lo script viene eseguito e aggiungi le due righe al crontab. Ma se eseguo nuovamente lo script, aggiunge di nuovo quelle righe, quindi avrò quattro righe che dicono le stesse cose. Voglio che lo script di installazione venga eseguito in modo tale che le righe inserite nel crontab non si ripetano. Come lo posso fare


Non capisco quale sia il tuo obiettivo? perché lo hai scritto in primo luogo?, ti preghiamo di modificare e aggiungere informazioni nel tuo post originale. tks
X Tian,

Risposte:


18

Consiglierei di usare /etc/cron.doltre crontab.

È possibile inserire file in /etc/cron.dcui si comportano come voci crontab. Sebbene il formato sia leggermente diverso.

Per esempio
/etc/cron.d/pcap:

*/05 * * * * root bash /mnt/md0/capture/delete_old_pcap.sh
*/12 * * * * root bash  /mnt/md0/capture/merge_pcap.sh

La differenza nel formato sta nell'aggiungere l'utente a eseguire il lavoro come dopo la specifica dell'ora.

Ora puoi semplicemente verificare se il file esiste e, se lo sovrascrivi, non importa.

 

Nota che è possibile che il tuo demone cron potrebbe non avere /etc/cron.d. Non so quali demoni cron lo abbiano, ma vixie cron è il demone cron standard su Linux, e lo fa.


3

È possibile invece dichiarare una funzione:

add() {
  grep -Fq "$1" mycron || echo "$1" >> mycron
}

e invocalo dicendo:

add "*/05 * * * * bash /mnt/md0/capture/delete_old_pcap.sh"

Ciò aggiungerebbe la riga solo se non esiste nel file.


puoi dirci cosa fa grep -Fq "$ 1"?
Jishnu U Nair,

E lo script dà errore grep: il file di input `mycron 'è anche l'output
Jishnu U Nair

@JishnuUNair -Ffarebbe grepinterpretare il modello come stringa fissa.
Devnull,

@JishnuUNair Sei sicuro di aver copiato correttamente il testo sopra?
Devnull,

si, l'ho copiato correttamente.
Jishnu U Nair,

1

da bash che uso

    crontab -l | { cat; echo "*/10 * * * * /script/script.sh > /dev/null 2>&1"; } | crontab -

Utilizzare anche questo script per aggiungere voci cron su server remoti

    cronok="##";
    cronok+=`ssh $host 'crontab -l'`;
    pattern="reboot.sh"

    if [[ "$cronok" == *${pattern}* ]]; then
         echo "found cron  at [$host]"
      else
        echo "Cron at [$host] not found adding now"
       `ssh $host 'crontab -l | { cat; echo "*/10 * * * * /root/reboot.sh > /dev/null 2>&1"; } | crontab -'`
       echo "finished cron"
    fi

0

Puoi scrivere uno script e aggiungerlo a crontab per fermarlo:

####You should calculate tiem you want kill your script.
#######code of calculating........
pid=`ps ax |egrep myscript |awk {'print $1'}`
kill -9 $pid
#OR
kill $pid

3
Questo non risponde alla domanda. Inoltre, kill -9dovrebbe essere fatto solo come ultima risorsa - unix.stackexchange.com/questions/8916/…
Graeme,
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.