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 14/02/2016, à 23:24

phux

[Résolu] Redirection stdout et stderr dans anacron

Bonjour, j'utilise anacron en mode utlisateur avec la manip suivante :

dans ~/.profile :

# Exécution du fichier anacrontab en mode utilisateur
# -t path/anacrontab : ficher anacrontab utilisateur
# -S path/spooldir : répertoire de stockage des horodatages
# &>> logfile : redirection des sorties standard et erreur vers le fichier log (avec ajout) 
/usr/sbin/anacron -t $HOME/.anacron/anacrontab -S $HOME/.anacron/spool &>> $HOME/.anacron/anacron.log

Dans ~/.anacron/anacrontab :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
####################################################################
# périodicité (jours),                                             #
# |      délai (minutes),                                          #
# |      |       nom de la tache,                                  #
# |      |       |          commandes                              #
####################################################################

1	1	TEST	echo "$(date "+%F %R") : Test anacron ok" >> $HOME/.anacron/anacron.log;

Dans ce cas, anacron lance le job TEST tous les jours, et redirige bien la sortie standard vers le fichier anacron.log avec une ligne du type :

2016-02-14 22:45 : Test anacron ok

Par contre, si je je ne redirige pas explicitement la sortie dans la commande bash de anacrontab,

1	1	TEST	echo "$(date "+%F %R") : Test anacron ok"

en supposant que la redirection de stout et stderr définie dans .profile va faire le job, rien ne se passe : le fichier anacron.log n'est pas mis à jour.

Une piste ?

Merci d'avance.

Dernière modification par phux (Le 15/02/2016, à 23:00)

Hors ligne

#2 Le 15/02/2016, à 08:54

bruno

Re : [Résolu] Redirection stdout et stderr dans anacron

Bonjour,

C'est normal. Le fichier .profile n'est lu que lorsque bash est invoqué en tant que « login shell » interactif, c'est à dire quand tu ouvres une console avec ALt+Ctrl+F1 et que tu saisis ton nom d'utilisateur et mot de passe par exemple.
Une tâche cron n'invoque pas l'interpréteur de commande en tant que « login shell », .profile n'est donc pas interprété dans ce cas.

Pour des explication plus complètes voir man bash et/ou faire une recherche sur shell de connexion/login shell, shell intercatif

#3 Le 15/02/2016, à 22:59

phux

Re : [Résolu] Redirection stdout et stderr dans anacron

Bonjour Bruno, merci de ton aide.

Pas de ~/.bash_profile ni de ~/.bash_login dans Ubuntu, c'est bien ~/.profile qui est interprété à chaque lancement de session, et qui lance la commande

/usr/sbin/anacron -t $HOME/.anacron/anacrontab -S $HOME/.anacron/spool &>> $HOME/.anacron/anacron.log
man bash a écrit :

Lorsque bash est lancé comme shell de connexion interactif, ou comme shell non-interactif avec l'option --login, il lit et exécute tout d'abord les commandes se trouvant dans le fichier /etc/profile s'il existe. Après lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login, et ~/.profile, dans cet ordre, et exécute les commandes se trouvant dans le premier fichier existant et accessible en lecture. L'option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.

Mais tu m'as mis sur la voie. Si je renomme anacrontab en anacrontab1 par exemple et que je lance

/usr/sbin/anacron -T -t $HOME/.anacron/anacrontab -S $HOME/.anacron/spool &>> $HOME/.anacron/anacron.log

pour tester anacron, voici ce que ça donne :

cat anacron.log
vendredi 12 février 2016, 15:37:26 (UTC+0100) : Test anacron
anacron: Error opening /home/pierre-jean/.anacron/anacrontab: No such file or directory
anacron: Aborted

Il y a bien redirection des messages de anacron vers anacron.log. Mon erreur vient de ce que j'ai confondu la redirection des messages de la commande anacron et la redirection des messages du job lancé par anacron, car les deux pointaient sur le même fichier anacron.log.

Les messages des jobs lancés par anacron ne sont pas dirigés vers stderr ou stdout mais vers le mail utilisateur ou défini par la variable d'environnement MAILTO comme dit dans la doc d'anacron :

man anacron a écrit :

If a job generates any output on its standard output  or  standard  error,  the output  is mailed to the user running Anacron (usually root), or to the address contained by the MAILTO environment variable in the crontab, if such exists. If the LOGNAME environment variable is set, it will be used as From: field.

J'ai donc résolu le problème séparant les deux logs :
message de anacron >> anacron.log
message des jobs lancés par anacron >> anacron.diary

ce qui donne dans anacrontab :

####################################################################
# périodicité (jours),                                             #
# |      délai (minutes),                                          #
# |      |       nom de la tache,                                  #
# |      |       |          commandes                              #
####################################################################
1       1       TEST    echo "$(date "+%F %R") : [anacron] Test ok" >> $HOME/.anacron/anacron.diary 2>&1;

Conclusion : RTFM ! Mais encore faut-il lire savoir lequel !

Encore merci pour m'avoir aidé à résoudre le problème, je butais dessus depuis des semaines jusqu'à ce que tu m'aiguilles vers la doc.

Hors ligne