Sous Linux, j'ai écrit quelques scripts à exécuter lors du démarrage et joué avec les différentes façons de les installer. Pour les scripts plus volumineux, je mettrai /etc/init.d
et associez le /etc/rc.d/rc?.d
niveaux d'exécution. Pour les petits scripts, je vais ajouter à /etc/rc.d/rc.local
. Ce processus semble se dérouler sans heurts.
Maintenant, j'ai peaufiné l'un de mes scripts et il échoue. J'ai beaucoup de mal à le diagnostiquer car je n'arrive pas à capturer la sortie d'erreur. J'ai vérifié /var/log/messages
et fouilla le reste de /var/log
mais ne trouve rien d'utile.
Est-ce que quelqu'un sait:
Merci d'avance.
Non - ils vont à STDOUT (si vous utilisez echo
) ou STDERR (si vous utilisez echo >&2
).
Vos scripts doivent écrire dans les journaux et/ou syslog par eux-mêmes (votre distribution peut contenir certaines fonctions init.d qui pourraient vous y aider - ajoutez votre distribution à votre question).
Si vous optez pour les journaux, recherchez la commande tee
. Si vous optez pour syslog, regardez logger
. Vous pouvez les combiner comme vous le souhaitez.
Écrivez un script wrapper qui appelle votre script et redirige la sortie vers un fichier
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Vous pouvez créer une fonction pour faire écho du message à l'écran et au 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 mettre cela dans un fichier séparé et l'inclure dans vos scripts avec
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
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 vers 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/ .