Instalando o crontab usando o script bash

11

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 adicione as duas linhas ao crontab. Mas se eu executar o script novamente, ele adicionará essas linhas novamente, portanto terei quatro linhas dizendo a mesma coisa. Eu quero que o script de instalação seja executado de forma que as linhas inseridas no crontab não se repitam. Como eu posso fazer isso

Jishnu U Nair
fonte
Eu não entendo qual é o seu objetivo? por que você o escreveu em primeiro lugar?, edite e adicione informações em sua postagem original. tks
X Tian

Respostas:

18

Eu recomendaria usar /etc/cron.dmais crontab.

Você pode colocar arquivos nos /etc/cron.dquais se comportam como entradas do 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 de horário.

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

 

Observe que é possível que seu daemon cron possa não ter /etc/cron.d. Não sei quais daemons cron o possuem, mas o vixie cron é o daemon cron padrão no linux, e ele possui.

Patrick
fonte
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 apenas se não existir no arquivo.

devnull
fonte
você pode dizer o que grep -Fq "$ 1" faz?
Jishnu U Nair
E o script de erro dar grep: entrada de arquivo `mycron' também é a saída
Jishnu U Nair
@JishnuUNair -Ffaria grepinterpretar o padrão como uma sequência fixa.
27414 devnull
@JishnuUNair Tem certeza de que copiou o texto acima corretamente?
27414 devnull
sim, eu copiei corretamente.
Jishnu U Nair
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 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
Markus07
fonte
0

Você pode escrever um script e adicioná-lo ao crontab para interrompê-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
PersianGulf
fonte
3
Isso não responde à pergunta. Além disso, kill -9só deve ser feito como último recurso - unix.stackexchange.com/questions/8916/…
Graeme