Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nail et cron

22 réponses
Avatar
Christophe PEREZ
Bonsoir,

Suivant les bons conseils de TiChou, j'avais installé nail en
remplacement de mailx pour mes différents postes hors serveur.
J'avais fait le lien de /usr/bin/nail vers /bin/mail.
J'avais fait le test en ligne de commande, tout était bon.
Et j'avais bêtement cru que ce lien suffirait à cron.
Or, ça ne semble pas le cas, je ne reçois plus aucun mail de la sortie
de cron de ces postes.
J'ai bien le smtp de mon serveur (postfix) déclaré dans /etc/nailrc,
MAILTO=root dans /etc/crontab, et un alias de root vers chris dans le
/etc/aliases du serveur.

A priori, il n'y a pas de pb sur le serveur puisque lorsque j'avais des
postfix locaux sur chaque poste qui envoyait sur le serveur, j'avais bien
toutes mes sorties de cron par mail.

Avec un test dans mon cron.hourly, je me retrouve avec ça dans
/var/log/syslog :
CROND[26712]: (root) MAIL (mailed 46 bytes of output but
got status 0xffffffff )

Mais que veut donc dire ce status ? et l'erreur est-elle bien là ?
Quel détail me manque t'il donc au niveau de la config de cron ?

Merci.

--
Christophe PEREZ
Écrivez moi sans _faute !

10 réponses

1 2 3
Avatar
TiChou
Dans le message <news:,
*Christophe PEREZ* tapota sur f.c.o.l.configuration :

Bonsoir,


Re salut, :)

Suivant les bons conseils de TiChou, j'avais installé nail en
remplacement de mailx pour mes différents postes hors serveur.
J'avais fait le lien de /usr/bin/nail vers /bin/mail.
J'avais fait le test en ligne de commande, tout était bon.
Et j'avais bêtement cru que ce lien suffirait à cron.
Or, ça ne semble pas le cas, je ne reçois plus aucun mail de la sortie
de cron de ces postes.


Oui, mais comme je l'avais déjà dit récemment, peut être pas à toi, les
différentes versions qui existent de cron, n'utilisent pas la commande
'mail' pour envoyer des mails, mais le wrapper sendmail. Il te faut donc un
serveur mail pour que le service cron puisse envoyer des mails.

Merci.


De rien.

--
TiChou

Avatar
TiChou
Dans le message <news:,
*TiChou* tapota sur f.c.o.l.configuration :

Suivant les bons conseils de TiChou, j'avais installé nail en
remplacement de mailx pour mes différents postes hors serveur.
J'avais fait le lien de /usr/bin/nail vers /bin/mail.
J'avais fait le test en ligne de commande, tout était bon.
Et j'avais bêtement cru que ce lien suffirait à cron.
Or, ça ne semble pas le cas, je ne reçois plus aucun mail de la sortie
de cron de ces postes.


Oui, mais comme je l'avais déjà dit récemment, peut être pas à toi,


http://groups.google.fr/groups?selm=

Ce n'était donc pas à toi. :) J'ai la mémoire embrouillé. :)

différentes versions qui existent de cron, n'utilisent pas la commande
'mail' pour envoyer des mails, mais le wrapper sendmail. Il te faut donc
un serveur mail pour que le service cron puisse envoyer des mails.


Il reste quand même une solution. Il suffirait d'écrire un script en shell
qui simulerait les fonctions basiques de ce wraper sendmail tout en
utilisant la commande nail. Mais vu l'heure tardive, j'ai un peu la flemme
de l'écrire.

--
TiChou


Avatar
Christophe PEREZ
Le Mon, 08 Nov 2004 01:19:40 +0100, TiChou a écrit:

Ce n'était donc pas à toi. :) J'ai la mémoire embrouillé. :)


Je m'en serais souvenu, quoique je crois bien avoir lu ce post quand
même, mais je n'y ai pas prêté la même attention.

Il reste quand même une solution. Il suffirait d'écrire un script en shell
qui simulerait les fonctions basiques de ce wraper sendmail tout en
utilisant la commande nail. Mais vu l'heure tardive, j'ai un peu la flemme
de l'écrire.


Je te laisse jusqu'à demain même heure.


:-))

Non, plus sérieusement, je vais essayer de voir ce que tu veux dire et
essayer d'en tirer quelque chose moi même, mais j'ai quand même quelques
doutes...

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
TiChou
Dans le message <news:,
*Christophe PEREZ* tapota sur f.c.o.l.configuration :

Il reste quand même une solution. Il suffirait d'écrire un script en
shell qui simulerait les fonctions basiques de ce wraper sendmail tout en
utilisant la commande nail. Mais vu l'heure tardive, j'ai un peu la
flemme de l'écrire.


Je te laisse jusqu'à demain même heure.

:-))


J'ai pris un peu d'avance, tu ne m'en voudras pas j'espère ? :-P

Je te propose les deux scripts suivants, relativement similaire et qui
simulent donc le fonctionnement de sendmail en utilisant nail.

En bash :

$ cat /usr/sbin/sendmail (ou /usr/lib/sendmail selon la distribution)

#!/bin/bash

usage() {
echo "Usage: $0 [-fsender] [-Fname] address ..."
exit 1
}

while getopts A:B:b:C:cd:e:F:f:Gh:IiL:M:mN:nO:o:p:q:R:r:sTtV:vX: opt
do
case "$opt" in
f)
name="$OPTARG"
;;
F)
fullname="$OPTARG"
;;
?)
usage
;;
esac
done

shift $[OPTIND-1]

if [ $# -eq 0 ]
then
usage
fi

if [ -z "$name" ]
then
name="$USER@$HOSTNAME"
fi

if [ ! -z "$fullname" ]
then
from=""$fullname" <$name>"
else
from="$name"
fi

/usr/bin/nail -r "$from" -- $@ <&0

Ce premier script me pose un problème sur une de mes machines car je
rencontre un bug avec la fonction interne 'getopts' de ma version de bash et
curieusement seulement sous root. En effet, quand je passe volontairement
une option inconnue à ce script, la fonction 'getopts' est alors sensée
placer la valeur '?' dans la variable $opt (voir help getopts ou man bash).
Au lieu de cette valeur, j'ai systématiquement la valeur '3'. Sur mes autres
machines, il fonctionne très bien.

Dans le doute, j'ai donc conçu ce deuxième script qui utilise la commande
getopt (paquet util-linux) et qui a l'avantage de fonctionner avec d'autres
shells que bash :

$ cat /usr/sbin/sendmail

#!/bin/sh

usage() {
echo "Usage: $0 [-fsender] [-Fname] address ..."
exit 1
}

OPTS=`/usr/bin/getopt -o
A:B:b:C:cd:e:F:f:Gh:IiL:M:mN:nO:o:p:q:R:r:sTtV:vX: -n "$0" -- "$@"`

if [ $? != 0 ]
then
usage
fi

eval set -- "$OPTS"

while true
do
case "$1" in
-f)
name="$2"
shift 2
;;
-F)
fullname="$2"
shift 2
;;
--)
shift
break
;;
*)
shift
;;
esac
done

if [ $# -eq 0 ]
then
usage
fi

if [ -z "$name" ]
then
name="$USER@$HOSTNAME"
fi

if [ ! -z "$fullname" ]
then
from=""$fullname" <$name>"
else
from="$name"
fi

/usr/bin/nail -r "$from" -- $@ <&0


Il ne te reste plus qu'à l'essayer et, j'espère, à le valider. :)

--
TiChou


Avatar
Christophe PEREZ
Le Mon, 08 Nov 2004 16:38:37 +0100, TiChou a écrit:

J'ai pris un peu d'avance, tu ne m'en voudras pas j'espère ? :-P


C'était un délai maxi ! :-)

Je te propose les deux scripts suivants, relativement similaire et qui
simulent donc le fonctionnement de sendmail en utilisant nail.


T'es un chef toi !

[...]
Ce premier script me pose un problème sur une de mes machines car je
rencontre un bug avec la fonction interne 'getopts' de ma version de bash et
curieusement seulement sous root.


Je vais tester...

En effet, quand je passe volontairement
une option inconnue à ce script, la fonction 'getopts' est alors sensée
placer la valeur '?' dans la variable $opt (voir help getopts ou man bash).
Au lieu de cette valeur, j'ai systématiquement la valeur '3'. Sur mes autres
machines, il fonctionne très bien.

Dans le doute, j'ai donc conçu ce deuxième script qui utilise la commande
getopt (paquet util-linux) et qui a l'avantage de fonctionner avec d'autres
shells que bash :


L'idéal ne serait-il pas alors de tester la présence de getopt et sinon
d'utiliser getopts ?

[...]
Il ne te reste plus qu'à l'essayer et, j'espère, à le valider. :)



Je vais essayer tout ça...
L'idiot dans tout ça, c'est que je ne sais pas comment simuler le cron :-)
Ou, plus simplement, comment savoir quelles options cron envoie à
sendmail pour lancer cette même commande manuellement.

En tout cas, vraiment merci de t'être donné toute cette peine.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Mon, 08 Nov 2004 12:37:25 -0400, Christophe PEREZ a écrit:

L'idéal ne serait-il pas alors de tester la présence de getopt et sinon
d'utiliser getopts ?


Genre :
GETOPT=$(which getopt)
if [ -n "$GETOPT" ] ; then
OPTS=$(/usr/bin/getopt -o A:B:b:C:cd:e:F:f:Gh:IiL:M:mN:nO:o:p:q:R:r:sTtV:vX: -n "$0" -- "$@")
[ $? != 0 ] && usage
eval set -- "$OPTS"
while true ; do
case "$1" in
-f)
name="$2"
shift 2
;;
-F)
fullname="$2"
shift 2
;;
--)
shift
break
;;
*)
shift
;;
esac
done
else
while getopts A:B:b:C:cd:e:F:f:Gh:IiL:M:mN:nO:o:p:q:R:r:sTtV:vX: opt ; do
case "$opt" in
f)
name="$OPTARG"
;;
F)
fullname="$OPTARG"
;;
?)
usage
;;
esac
done

shift $[OPTIND-1]
fi


Je vais essayer tout ça...


Fonctionne tel que ci-dessus (getopt présent), mais sortie un peu lourde
du cron :
----------------------------------------------------------------
From: root (Cron Daemon)
To: root
Subject: Cron nice -n 19 run-parts /etc/cron.hourly
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/>
X-Cron-Env: <LOGNAME=root>

ceci est de test de sortie cron
----------------------------------------------------------------

Pourquoi tout cet environnement et ces champs From et To qui
n'apparaissent habituellement pas dans les sortie de cron ?


L'idiot dans tout ça, c'est que je ne sais pas comment simuler le cron :-)


J'ai du attendre 13:01 ;-)

Ou, plus simplement, comment savoir quelles options cron envoie à
sendmail pour lancer cette même commande manuellement.


J'avais fait des tests avec echo "test" | sendmail root
mais évidemment, je n'avais pas toutes ces infos superflues


--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
TiChou
Dans le message <news:,
*Christophe PEREZ* tapota sur f.c.o.l.configuration :

L'idéal ne serait-il pas alors de tester la présence de getopt et sinon
d'utiliser getopts ?


La commande 'getopt' fait partie du paquet util-linux et ce paquet est
indispensable et présent sur toutes les distributions (sauf peut être sur
certaines distributions de type embarqué qui utiliseraient busybox par
exemple, ou sur des distributions vraiment exotiques).

Je vais essayer tout ça...
L'idiot dans tout ça, c'est que je ne sais pas comment simuler le cron :-)
Ou, plus simplement, comment savoir quelles options cron envoie à
sendmail pour lancer cette même commande manuellement.


Un simple cron sachant que, dans un cron, la sortie standard et la sortie
erreur, si elles ne sont pas redirigées, sont renvoyées par mail.

* * * * * date

En tout cas, vraiment merci de t'être donné toute cette peine.


Avec plaisir.

--
TiChou

Avatar
TiChou
Dans le message <news:,
*TiChou* tapota sur f.c.o.l.configuration :

Je vais essayer tout ça...
L'idiot dans tout ça, c'est que je ne sais pas comment simuler le cron
:-) Ou, plus simplement, comment savoir quelles options cron envoie
à sendmail pour lancer cette même commande manuellement.



[...]

J'avais mal compris la question je crois. :)
Vu les messages d'erreur que tu nous avais reporté, je devine que tu
utilises le vixie-cron (beurk :P) et celui-ci appelle sendmail avec les
options suivantes :

/usr/sbin/sendmail -i -FCronDaemon -oem user

--
TiChou


Avatar
Christophe PEREZ
Le Mon, 08 Nov 2004 18:12:49 +0100, TiChou a écrit:

La commande 'getopt' fait partie du paquet util-linux et ce paquet est
indispensable et présent sur toutes les distributions (sauf peut être sur
certaines distributions de type embarqué qui utiliseraient busybox par
exemple, ou sur des distributions vraiment exotiques).


Ah ! Ok !

Un simple cron sachant que, dans un cron, la sortie standard et la sortie
erreur, si elles ne sont pas redirigées, sont renvoyées par mail.

* * * * * date


pffff... suis-je bête.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Mon, 08 Nov 2004 18:22:53 +0100, TiChou a écrit:

Vu les messages d'erreur que tu nous avais reporté, je devine que tu
utilises le vixie-cron (beurk :P)


J'utilise ce qu'on (mdk 10.0) me donne ;-)

et celui-ci appelle sendmail avec les
options suivantes :

/usr/sbin/sendmail -i -FCronDaemon -oem user


Ok, mais ça ne me dit pas d'où vient cet environnement "parasite" ;-)

--
Christophe PEREZ
Écrivez moi sans _faute !

1 2 3