Instalando o crontab usando o script bash

9

Eu criei um script para instalar dois scripts no 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

O script é executado e adiciona as duas linhas ao crontab. Mas se eu executar o script novamente, ele adicionará essas linhas novamente, assim eu terei quatro linhas dizendo as mesmas coisas. Eu quero que o script de instalação seja executado de tal forma que as linhas inseridas no crontab não se repitam. Como posso fazer isso

    
por Jishnu U Nair 27.02.2014 / 13:08

4 respostas

15

Eu recomendaria usar /etc/cron.d over crontab .

Você pode colocar arquivos em /etc/cron.d que se comportam como entradas crontab. Embora o formato seja um pouco diferente.

Por exemplo, /etc/cron.d/pcap :

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

A diferença no formato é adicionar o usuário para executar o trabalho como após a especificação da hora.

Agora você pode simplesmente verificar se o arquivo existe e, se você sobrescrever, não importa.

Note que é possível que seu daemon do cron não tenha /etc/cron.d . Eu não sei quais daemons do cron têm, mas o vixie cron é o daemon do cron padrão no linux, e ele faz.

    
por 27.02.2014 / 14:42
3

Você poderia declarar uma função:

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

e invoque-o dizendo:

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

Isso acrescentaria a linha somente se não existir no arquivo.

    
por 27.02.2014 / 13:15
1

do bash eu uso

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

Use também este script para adicionar entradas do cron em servidores remotos

    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
    
por 26.08.2015 / 04:14
0

Você pode escrever um script e adicioná-lo ao crontab para pará-lo:

####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
    
por 27.02.2014 / 13:18

Tags