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

Jishnu U Nair
la source
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
askubuntu.com/questions/58575/add-lines-to-cron-from-script
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

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.

Patrick
la source
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.

devnull
la source
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
Markus07
la source
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
Golfe Persique
la source
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