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 /etc/rc.d/rc?.d
lierai les niveaux d'exécution appropriés . Pour les petits scripts, je vais ajouter à /etc/rc.d/rc.local
. Ce processus semble se dérouler sans heurts.
Maintenant, j'ai peaufiné 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 fouillé le reste /var/log
mais je ne trouve rien d'utile.
Est-ce que quelqu'un sait:
- ces messages d'erreur sont-ils automatiquement capturés quelque part?
- sinon, comment capturer la stdout / stderr de mes scripts init.d?
Merci d'avance.
Réponses:
Non - ils vont à STDOUT (si vous utilisez
echo
) ou STDERR (si vous utilisezecho >&2
).Vos scripts doivent écrire dans les journaux et / ou syslog par eux-mêmes (votre distribution peut contenir des fonctions init.d qui pourraient vous y aider - ajoutez votre distribution à votre question).
Si vous optez pour les journaux, recherchez la
tee
commande. Si vous optez pour syslog, regardezlogger
. Vous pouvez les combiner comme vous le souhaitez.la source
Écrivez un script wrapper qui appelle votre script et redirige la sortie vers un fichier
la source
Vous pouvez créer une fonction pour faire écho du message à l'écran et au syslog, quelque chose comme ceci:
Vous pouvez également mettre cela dans un fichier séparé et l'inclure dans vos scripts avec
la source
[ -r ... ]
test pour vérifier s'il existe?Les messages des scripts d'initialisation ne sont généralement capturés nulle part. Ainsi, vous devez mettre en place 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:Je l'ai trouvé dans cet excellent article: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .
la source