#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
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 :
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