J'ai créé un script pour installer deux scripts sur le 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 fonctionne et ajoutez les deux lignes au crontab. Mais si j'exécute à nouveau le script, cela ajoute de nouveau ces lignes, je vais donc avoir quatre lignes disant les mêmes choses. Je souhaite que le script d'installation fonctionne de telle sorte que les lignes insérées sur le crontab ne se répètent pas. Comment puis je faire ça
Je recommanderais d'utiliser /etc/cron.d
sur crontab
.
Vous pouvez placer des fichiers dans /etc/cron.d
qui se comporte comme des entrées de 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 ajoute l'utilisateur à exécuter le travail comme après la spécification de l'heure.
Maintenant, vous pouvez simplement vérifier si le fichier existe et si vous écrasez cela, cela n'a pas d'importance.
Notez que c'est possible que votre démon cron pourrait ne pas avoir /etc/cron.d
. Je ne sais pas quels daemons cron l'ont, mais Vixie Cron est le démon cron standard sur Linux, et c'est.
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 annoncerait la ligne que si cela n'existe pas dans le fichier.
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
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