Solution 1 :
-
Non - ils vont à STDOUT (si vous utilisez
echo
) ou STDERR (si vous utilisezecho >&2
). -
Vos scripts doivent écrire eux-mêmes dans les journaux et/ou syslog (votre distribution peut contenir des fichiers init.d fonctions qui pourraient vous y aider - ajoutez votre distribution à votre question).
Si vous optez pour les journaux, recherchez le tee
commande. Si vous optez pour syslog, regardez logger
. Vous pouvez les combiner comme bon vous semble.
Solution 2 :
Écrivez un script wrapper qui appelle votre script et redirige la sortie vers un fichier
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Solution 3 :
Vous pouvez créer une fonction pour renvoyer le message à la fois à l'écran et à syslog, quelque chose comme ceci :
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
Vous pouvez également le mettre dans un fichier séparé et l'inclure dans vos scripts avec
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
Solution 4 :
Les messages des scripts d'initialisation ne sont généralement capturés nulle part. Ainsi, vous devez mettre en œuvre un moyen de le faire vous-même. Une bonne idée est d'utiliser logger
pour envoyer toutes les sorties à syslog. Cet exemple enverra stdout et stderr à syslog :
exec 1> >(logger -s -t $(basename $0)) 2>&1
Je l'ai trouvé dans cet excellent article :http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/.