Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm), 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 ... smile

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

chaoswizard a écrit :

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 smile

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.sh

c) Editer le fichier crontab de l'utilisateur logge :
sudo crontab -e

d) 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.sh


Appuyer sur les touches suivantes :
Ctrl+O        Pour Ecrire/Enregistrer ^O
Ctrl+X        Pour Quitter ^X


e) Relancer le cron par :
/etc/init.d/cron reload

f) 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

Zenigata a écrit :

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 ..." wink


La connaissance, c'est partager le savoir qui nous fait grandir.
(Olivier Lockert)

Hors ligne