Re: Script transcript non-interactif : comment l'arrêter ?

Top Page

Reply to this message
Author: Vincent Caron
Date:  
To: Guilde
Subject: Re: Script transcript non-interactif : comment l'arrêter ?
On 09/25/2014 01:13 PM, Nicolas Ecarnot wrote:
> -------------------------------------
> #!/bin/bash
> /usr/bin/script 2>&1 | /bin/mailx -s "$0" nicolas@???
> echo 'test'
> exit
> -------------------------------------


Curieux, mailx devrait envoyer le mail dès que ton script se termine
ou ferme ses sorties. Le problème peut venir du script, il ne faut pas
oublier que lancer un programme depuis son terminal ou depuis cron peut
être très différent, sur au moins 2 aspects : environnement, tty.

Pour tester en mode interactif, tu peux tenter d'approximer crond en
vidant l'environnement et en te détachant de ton tty ainsi :

$ env -i mon-cron.sh </dev/null >/dev/null 2>/dev/null


Note aussi que ça ne reproduit pas tout à fait le comportement de
cron, qui n'envoie un mail qui si le script émet qqchose sur ses sorties
(stdout ou stderr). Ca va envoyer un mail vide à chaque appel (si tout
se passe bien), ce qui peut être très ennuyeux.

Du coup il faut "bufferiser" la sortie du script et décider à la fin
sin on envoie ou pas un mail. Comme on ne peut pas prévoir la taille
(des fois ça part en vrille et ça envoie des centaines de MB de caca),
je recommande :

  out="$(/usr/bin/script 2>&1 | dd bs=1 count=50k)"
  if [ -s "$out" ]; then
     echo "$out" | /bin/mailx -s "$0" nicolas@???
  fi


Ce qui limite le message à 50kB (et rentre largement dans une variable
de shell).

Tu peux aussi utiliser /usr/bin/mail qui est plus portable (si tu as
mailx installé, ça correspond en général au même programme).