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 16/10/2012, à 23:56

DonutMan75

[RESOLU] Aide débutant cron

Bonjour à tous,

j'ai essayé de suive l'article sur le cron http://doc.ubuntu-fr.org/cron, mais ça ne marche pas chez moi... :'(

Objectif : tester la connection internet à intervalles réguliers et stocker le résultat dans un fichier (1 si connecté à internet, 0 sinon)

Voici mon script qui effectue cette tâche :

#! /bin/bash

# test_livebox_cron
# Teste la connectivté à Internet

# Serveur ping
DEST="google.fr"

# Fichier de sortie
FICHIER="/home/donut/Scripts/test_livebox_cron.dat"

echo "Test de la connectivité"
ping -c 3 $DEST
	
if [ $? -eq 0 ] ; then
	# HOST a répondu au ping
	echo 1 >> $FICHIER
else
	echo 0 >> $FICHIER
fi

Il fonctionne très bien lorsque je le lance à la main. J'ai bien fait le chmod u+x qui va bien, et le répertoire /home/donut/Scripts/ figure bien dans mon PATH (ajouté dans mon .profile).

J'ai voulu le lancer automatiquement toutes les 5 minutes (mettons).

Suivant l'article cité ci-dessus, j'ai donc modifié ma crontab via la commande crontab -e.
Voici ce que j'obtiens :

$ crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/5	*	*	*	*	test_livebox_cron

Or j'ai beau attendre, je ne vois point apparaître de fichier test_livebox_cron.dat dans mon répertoire  /home/donut/Scripts............ :'(

Quelqu'un a-t-il une idée ???

Par ailleurs, l'article dit au début qu'il faut éditer le fichier /etc/crontab.
Or celui-ci est en lecture seule (???) et n'est pas identique au fichier que j'obtiens quand je fais crontab -e/l (en particulier, la notion d'utilisateur disparait...)

Merci d'avance pour vos idées, ça doit être tout bête mais là je seche...

A bientôt smile

Donut

Dernière modification par DonutMan75 (Le 19/10/2012, à 14:49)

Hors ligne

#2 Le 17/10/2012, à 00:16

Watael

Re : [RESOLU] Aide débutant cron

salut,

cron ne lit pas les fichiers de configuration des utilisateurs.
il faut donner le chemin complet du script sur la ligne de commande cron.
ou définir le PATH, pour y inclure ~donut/Scripts/, dans la crontab.

Dernière modification par Watael (Le 17/10/2012, à 00:17)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 17/10/2012, à 00:20

DonutMan75

Re : [RESOLU] Aide débutant cron

Bonsoir à tous,
bon, en faisant un :

$ sudo gedit /etc/crontab

j'ai apporté les modifications suivantes : variable PATH et dernière ligne du fichier

# /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=/home/donut/Scripts:/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 )
*	*	*	*	*	donut	test_livebox_cron

Cette fois-ci ça marche nickel...

Quelques petites précisions cependant :

1- mettre donut au lieu de root est sans doute plus sûr, mais dans les exemples sur le net, je vois souvent "root". Y'a-t-il un avantage ?

2- mon script utilise bash, mais dans crontab j'ai SHELL=/bin/sh. Quel impact ? Est-ce vraiment bash qui est utilisé ?? Comment faire si on a des scripts écrit en différent shell ??

3- pourquoi crontab -e/l ne fonctionne pas ?

4- le répertoire /home/donut/Scripts figure déjà dans mon .profile. Ca me semble étrange de devoir le préciser en deux endroits différents...

Merci pour votre aide smile

Donut

Dernière modification par DonutMan75 (Le 17/10/2012, à 00:28)

Hors ligne

#4 Le 17/10/2012, à 00:27

DonutMan75

Re : [RESOLU] Aide débutant cron

Merci Watael pour cette réponse,

donc si je comprends bien :
- sudo gedit /etc/crontab >>> crontab "centrale" où sont définies les règles par utilisateurs + les chemins

- crontab -e/l >>> permet de rajouter des règles pour un utilisateur donné, si par exemple il n'a pas les droit pour éditer directement la crontab.

Du coup, j'ai supprimé ma règle de /etc/crontab mais j'ai laissé le PATH=/home/donut/Scripts:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.

J'ai rajouté une nouvelle règle via crontab -e

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*	*	*	*	*	test_livebox_cron

Et là, de nouveau ça ne fonctionne pas.... sad
Il faudra que je reprenne ça à tête reposée demain matin ^^

Quoiqu'il en soit, merci pour ta réponse smile

Donut

Hors ligne

#5 Le 17/10/2012, à 00:32

Postmortem

Re : [RESOLU] Aide débutant cron

Salut,
Lorsque tu fais crontab -e, tu peux ajouter la variable PATH il me semble, comme tu l'avais fait dans /etc/crontab.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 17/10/2012, à 04:35

nesthib

Re : [RESOLU] Aide débutant cron

Quelques petite remarques :

  • n'utilise jamais sudo avec une appli graphique (ex. gedit), utilise gksudo

  • ne modifie jamais un crontab à la main, utilise « crontab -e »

  • n'utilise jamais les droits root lorsque ça n'est pas nécessaire (ici utilise le crontab utilisateur au lieu de celui de root)

Voilà pour les péchés capitaux tongue

Maintenant pour ton script, tu t'embêtes pour pas grand chose :

watch -n 300 'ping -c1 google.fr ; echo $? >>/tmp/ping.log'

et si tu veux le lancer en tâche de fond (c'est à dire pouvoir fermer ton terminal) :

nohup watch -n 300 'ping -c1 google.fr ; echo $? >>/tmp/ping.log' &

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 17/10/2012, à 08:24

DonutMan75

Re : [RESOLU] Aide débutant cron

Bonjour nesthib,
merci pour ces sages conseils, je ne connaissais ni gksudo ni watch. Merci également pour ton astuce qui simplifie mon problème immédiat wink

Néanmoins, mon problème reste entier concernant la question (plus générale) de l'exécution d'un script perso (qui ne pourrait être réduit à une simple ligne) via cron.

- L'édition directe de /etc/crontab, bien que non recommandée, fonctionne
- L'édition via la commande crontab -e, quant à elle, ne fonctionne pas chez moi

1- Je ne comprends pas du tout la différence entre /etc/crontab et crontab -e ni les liens qui unit ces deux méthodes... /etc/crontab ==> cas général (donc possiblement avec des cron root), crontab -e ==> cron supplémentaires pour les utilisateurs par les utilisateurs ?

2- pourquoi ma démarche qui modifie /etc/crontab pour le PATH et crontab -e pour lancer le script (cf. mon dernier message), ne fonctionne pas ?

Merci d'avance pour vos réponses,

Bonne journée smile

Hors ligne

#8 Le 17/10/2012, à 09:03

DonutMan75

Re : [RESOLU] Aide débutant cron

Bon en ayant farfouillé un peu sur le net, je commence à y voir clair

1- /etc/crontab est bien le cron système et ne doit donc pas être modifié par l'utilisateur (comme déjà dit ci-dessus). Crontab -e permet à chaque utilisateur d'avoir ses propres cron.

2- Dans /etc/crontab on peut spécifier un PATH, mais celui-ci ne se transmet pas à chaque utilisateur. Il ne me semble pas possible de définir de la même façon un PATH dans crontab -e... En explicitant le chemin de mon script dans crontab -e tout marche nickel.

Merci encore pour tout vos conseils smile

Hors ligne

#9 Le 17/10/2012, à 15:36

nesthib

Re : [RESOLU] Aide débutant cron

il est possible de définir ce que tu veux dans ton crontab utilisateur :

DISPLAY=":0.0"
USER="machin"
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h  dom mon dow   command
0 12 * * 1-5 /home/machin/truc

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne