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 № 1Si 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 dans123.log
.&&
Ceci exécute la commande qui suit seulement si
command
réussi (autrement dit, sicommmand
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é sicommand
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.