#1 Le 24/08/2009, à 09:21
- Sequanian
[Résolu] Lancer un bash à interval régulier avec cron
Bonjour à tous, j'ai un petit souci avec cron, je n'arrive pas à la paramétrer pour qu'il me lance à interval régulier (par exemple toutes les heures) un bash.
Voici le bash en question (il est tout simple et me permet de copier les logs de Squid sur un disque dur interne IDE que je partage avec un autre PC sous Windows pour voir les logs) :
#! /bin/bash
# On defini la DATE DU JOUR et HEURE
DATE=`date +%Y-%m-%d_%Hh%Mm%Ss`# On copie le fichier SOURCE vers DESTINATION EN AJOUTANT LA DATE et HEURE
sudo cp /var/log/squid/access.log /media/ARCHIVES-BOX/BOX/ARCHIVES/ARCHIVES-UBUNTU/Applications/Squid/Logs/access${DATE}.log
Et voici mon cron :
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
# ======= Taches PERSO =======
*/5 * * * * luc bash /home/luc/Scripts/ScriptSquidCopieAccessLog.sh
Logiquement (si j'ai bien écris ma ligne ), je demande à cron d'exécuter toutes les 5 minutes le bash 'ScriptSquidCopieAccessLog.sh' de l'utilisateur 'luc'
En manuel le bash fonctionne très bien (en revanche il me demande le mot de passe .... que je ne sais pas encore résoudre de manière automatique dans ma ligne)
Si vous pouvez m'aider ...
Dernière modification par Sequanian (Le 24/08/2009, à 19:45)
La connaissance, c'est partager le savoir qui nous fait grandir.
(Olivier Lockert)
Hors ligne
#2 Le 24/08/2009, à 09:28
- chaoswizard
Re : [Résolu] Lancer un bash à interval régulier avec cron
Si tu fais en sorte que le script soit lancé par le cron de root, il n'y a plus besoin du sudo !
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#3 Le 24/08/2009, à 09:30
- Zenigata
Re : [Résolu] Lancer un bash à interval régulier avec cron
Hmm plutôt que d'éditer un fichier qui comporte des trucs pour tout le monde, je me contenterai d'un "crontab -e" dans une console et d'y ajouter
*/5 * * * * /home/luc/Scripts/./ScriptSquidCopieAccessLog.sh
Et pour le mot de passe, tu peux aussi ajouter la commande précédée d'un sudo dans les commandes ne necessitant pas de mot de passe dans le fichier /etc/sudoers, ou effectivement ajouter la tâche au crontab de root, donc en virant les sudo du script et "sudo crontab -u root -e "
Dernière modification par Zenigata (Le 24/08/2009, à 09:33)
Hors ligne
#4 Le 24/08/2009, à 14:18
- Sequanian
Re : [Résolu] Lancer un bash à interval régulier avec cron
Merci de vos réponses ! J'expérimente et vous tiens au courant.
La connaissance, c'est partager le savoir qui nous fait grandir.
(Olivier Lockert)
Hors ligne
#5 Le 24/08/2009, à 18:15
- montesq
Re : [Résolu] Lancer un bash à interval régulier avec cron
Si tu fais en sorte que le script soit lancé par le cron de root, il n'y a plus besoin du sudo !
Quand tu lances ton script à la main, il te demande le mot de passe pour exécuter la commande sudo ...?
Donc quand le cron s'exécute, le mot de passe n'est pas saisi et donc forcément la commande sudo ... n'est pas exécutée
Hors ligne
#6 Le 24/08/2009, à 18:17
- chaoswizard
Re : [Résolu] Lancer un bash à interval régulier avec cron
Si c'est root qui lance le script, sudo ne sert à rien...
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#7 Le 24/08/2009, à 19:44
- Sequanian
Re : [Résolu] Lancer un bash à interval régulier avec cron
Voilà, ça roule maintenant
Faut dire qu'étant débutant j'ai pas tout saisi dès le départ aux réponses que vous m'avez donné. Alors (pour les débutant qui lirons ce post) je vais essayer de faire le plus simple possible.
a) Creer un bash 'ScriptSquidCopieAccessLog.sh' dans le repertoire '/home/luc/Scripts/'
--------------
#! /bin/bash# On defini la DATE DU JOUR et HEURE
DATE=`date +%Y-%m-%d_%Hh%Mm%Ss`# On copie le fichier SOURCE vers DESTINATION EN AJOUTANT LA DATE et HEURE
sudo cp /var/log/squid/access.log /media/ARCHIVES-BOX/BOX/ARCHIVES/ARCHIVES-UBUNTU/Applications/Squid/Logs/access${DATE}.log
--------------b) Attribue le droit d'execution sur ce bash :
sudo chmod +x ScriptSquidCopieAccessLog.shc) Editer le fichier crontab de l'utilisateur logge :
sudo crontab -ed) Ajouter les lignes desirees (dans notre cas) :
--------------
Pour une copie toute les heures :
--------------
00 */1 * * * root bash /home/luc/Scripts/ScriptSquidCopieAccessLog.sh--------------
Pour une copie à 12h00
--------------
00 12 * * * root bash /home/luc/Scripts/ScriptSquidCopieAccessLog.shAppuyer sur les touches suivantes :
Ctrl+O Pour Ecrire/Enregistrer ^O
Ctrl+X Pour Quitter ^Xe) Relancer le cron par :
/etc/init.d/cron reloadf) On pourra vérifier que les taches sont bien actives par un :
crontab -l
Le problème est donc résolu, j'espère que ça servira à quelqu'un.
Merci à tous pour votre aide apportée.
La connaissance, c'est partager le savoir qui nous fait grandir.
(Olivier Lockert)
Hors ligne
#8 Le 25/08/2009, à 16:07
- Zenigata
Re : [Résolu] Lancer un bash à interval régulier avec cron
Mmmh, normalement avec crontab -e, tu ne changes que ton crontab. Tu n'as pas le champ user dedans.
Donc il est probable que ton cron lance "root" puis"ton script", "root" ne produisant rien, et ton script n'ayant pas les droits admin...
Hors ligne
#9 Le 25/08/2009, à 18:12
- Sequanian
Re : [Résolu] Lancer un bash à interval régulier avec cron
Mmmh, normalement avec crontab -e, tu ne changes que ton crontab. Tu n'as pas le champ user dedans.
Donc il est probable que ton cron lance "root" puis"ton script", "root" ne produisant rien, et ton script n'ayant pas les droits admin...
"Et pourtant elle tourne ..."
La connaissance, c'est partager le savoir qui nous fait grandir.
(Olivier Lockert)
Hors ligne