Attention en revanche, 2>&1 >/dev/null n'a pas l'effet escompté ! L'ordre de redirection importe : celle ci-dessus va d'abord brancher stderr sur là où pointe stdout (donc le terminal), *puis* rediriger stdout vers /dev/null (mais sans toucher à stderr !). La bonne solution est >/dev/null 2>&1
Cf https://github.com/koalaman/shellcheck/wiki/SC2069 et https://mywiki.wooledge.org/BashFAQ/055 (PS : Shellcheck c'est le feu)
Thomas
Le ven. 3 déc. 2021 à 19:55, David Ponzone david.ponzone@gmail.com a écrit :
Vincent,
Merci t’es le meilleur, j’ai oublié que crontab utilisait /bin/sh par défaut, comme moi j’utilise bash sur root (et je redéfinis généralement SHELL dans la crontab, mais pas celle-là…) Ce qui est évidemment déroutant, c’est pourquoi 0.2% du temps seulement j’ai un email, alors que le source C envoie tout le temps à stderr, mais tu dois avoir raison, il doit y avoir un truc pas tout à fait atomique/linéaire dans l’exécution.
Effectivement, je vais repasser sur la syntaxe POSIX, rappelée par Wallace, ça sera plus propre.
Je savais que ça irait vite!
Merci
Le 3 déc. 2021 à 19:38, Vincent Tondellier via FRsAG frsag@frsag.org
a écrit :
On vendredi 3 décembre 2021 19:21:12 CET, Wallace wrote:
avec >&/dev/null tu ne rediriges pas stderr
Avec bash, csh, ou zsh, si :
https://wiki.bash-hackers.org/syntax/redirection#redirecting_output_and_erro...
Mais avec dash qui est plus posix de base (le /bin/sh par défaut sous
debian), c'est interprété comme "script & : >/dev/null"
exemple :
$ echo $SHELL /bin/zsh $ ls good bad &>/dev/null $ $ readlink /bin/sh dash $ /bin/sh $ ls good bad &>/dev/null $ ls: impossible d'accéder à 'good': Aucun fichier ou dossier de ce type ls: impossible d'accéder à 'bad': Aucun fichier ou dossier de ce type
[1] + Done(2) ls good bad $
Donc c'est bien possible que de temps en temps, le script ne passe pas
en tache de fond avant la fin du cron et affiche quelque chose
Pour rediriger stderr tu devrais avoir 2>&1 > /dev/null
et ca c'est la syntaxe portable.
On vendredi 3 décembre 2021 19:07:15 CET, David Ponzone wrote:
Soit une Debian 9.5. Soit un script bash qui est lancé par crontab 1440
fois par jour.
Dans la crontab, le script est lancé ainsi:
*/1 * * * * script >&/dev/null
Liste de diffusion du FRsAG http://www.frsag.org/
Liste de diffusion du FRsAG http://www.frsag.org/