Installation de crontab à l'aide du script bash


11

J'ai créé un script pour installer deux scripts sur la 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

Le script s'exécute et ajoute les deux lignes à la crontab. Mais si je lance à nouveau le script, il ajoute à nouveau ces lignes, donc j'aurai quatre lignes disant la même chose. Je veux que le script d'installation s'exécute de telle sorte que les lignes insérées dans la crontab ne se répètent pas. Comment puis je faire ça


Je ne comprends pas quel est ton objectif? pourquoi l'avez-vous écrit en premier lieu?, veuillez modifier et ajouter des informations dans votre message d'origine. tks
X Tian

Réponses:


18

Je recommanderais d'utiliser /etc/cron.dOver crontab.

Vous pouvez placer des fichiers /etc/cron.dqui se comportent comme des entrées crontab. Bien que le format soit légèrement différent.

Par exemple
/etc/cron.d/pcap:

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

La différence dans le format consiste à ajouter l'utilisateur pour exécuter le travail comme après la spécification d'heure.

Maintenant, vous pouvez simplement vérifier si le fichier existe et si vous le remplacez, cela n'a pas d'importance.

 

Notez qu'il est possible que votre démon cron n'en ait pas /etc/cron.d. Je ne sais pas quels démons cron l'ont, mais vixie cron est le démon cron standard sur linux, et c'est le cas.


3

Vous pouvez plutôt déclarer une fonction:

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

et l'invoquer en disant:

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

Cela ajouterait la ligne uniquement si elle n'existe pas dans le fichier.


pouvez-vous dire ce que fait grep -Fq "$ 1"?
Jishnu U Nair

Et le script donne une erreur grep: le fichier d'entrée `mycron 'est également la sortie
Jishnu U Nair

@JishnuUNair -Fferait grepinterpréter le motif comme une chaîne fixe.
devnull

@JishnuUNair Êtes-vous sûr d'avoir copié correctement le texte ci-dessus?
devnull

oui, je l'ai copié correctement.
Jishnu U Nair

1

de bash j'utilise

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

Utilisez également ce script pour ajouter des entrées cron sur des serveurs distants

    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

Vous pouvez écrire un script et l'ajouter à crontab pour l'arrêter:

####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
Cela ne répond pas à la question. En outre, cela kill -9ne devrait être fait qu'en dernier recours - unix.stackexchange.com/questions/8916/…
Graeme
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.