/ / Linux Bash - redirige les erreurs vers un fichier - linux, bash

Linux Bash - redirige les erreurs vers un fichier - linux, bash

Mon objectif est d'exécuter une commande en arrière-plan et de créer un journal uniquement en cas de problème.

Quelqu'un peut-il me dire si cette commande est OK pour cela?

bash: ./command > app/tmp/logs/model/123.log 2>&1 & echo $! >> /dev/null &

La commande elle-même est sans importance (juste un script PHP aléatoire).

Et / ou expliquer comment router les résultats de ma commande vers un fichier uniquement s'il s'agit d'une erreur?

Aussi, je ne peux pas comprendre ce que "echo $!" est-ce que (je l'ai copié ailleurs) ...

Merci d'avance!

Réponses:

4 pour la réponse № 1

Si je comprends bien, votre objectif est de courir command en arrière-plan et de laisser un fichier journal uniquement en cas d'erreur. Dans ce cas:

{ ./command >123.log 2>&1 && rm -f 123.log; } &

Comment ça marche:

  • {...} &

    Ceci exécute tout ce qui est entre accolades en arrière-plan. Les accolades ne sont pas strictement nécessaires ici pour cette commande exacte, mais leur inclusion ne cause aucun dommage et pourrait vous éviter ultérieurement un problème inattendu.

  • ./command >123.log 2>&1

    Cela fonctionne command et enregistre toutes les sorties dans 123.log.

  • &&

    Ceci exécute la commande qui suit seulement si command réussi (autrement dit, si commmand mettre son code de sortie à zéro).

  • rm -f 123.log

    Cela supprime le fichier journal. Puisque cette commande suit le &&, il est seulement exécuté si command réussi.

Discussion

Vous avez posé des questions sur:

echo $! >> /dev/null

echo $! affiche l'ID de processus de la commande précédente exécutée en arrière-plan. Dans ce cas, ce serait ./command. Cet affichage est toutefois envoyé à /dev/null qui est, effectivement, une poubelle.