logger le stderr et stdout un script dans le syslog

Le
Francois Lafont
Bonsoir à tous,

Avec la commande shell « echo message | logger -t tag », je peux mettre
dans un script un message dans le syslog de ma Debian. Mais est-il possible
de faire en sorte de mettre dans le syslog _tout_ ce que pourra afficher mon
script via stderr et stdout plutôt que d'utiliser la commande logger au coup
par coup ?

Par ailleurs, mon script utilise /bin/sh et donc j'aimerais éviter les basheries
si possible. Est-ce possible de faire ça ?

J'ignore comment (d'où ma question ici) mais ne puis-je pas lancer en arrière
plan la commande logger au tout début de mon script puis ensuite faire en sorte
que le script balance stdout et stderr dans le flux d'entrée du process logger ?

--
François Lafont
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe Weill
Le #26403165
Le 30/06/2016 00:17, Francois Lafont a écrit :
Bonsoir à tous,
Avec la commande shell « echo message | logger -t tag », je peux mettre
dans un script un message dans le syslog de ma Debian. Mais est-il possible
de faire en sorte de mettre dans le syslog _tout_ ce que pourra afficher mon
script via stderr et stdout plutôt que d'utiliser la commande logger au coup
par coup ?
Par ailleurs, mon script utilise /bin/sh et donc j'aimerais éviter les basheries
si possible. Est-ce possible de faire ça ?
J'ignore comment (d'où ma question ici) mais ne puis-je pas lancer en arrière
plan la commande logger au tout début de mon script puis ensuite faire en sorte
que le script balance stdout et stderr dans le flux d'entrée du process logger ?


script.sh 2>&1 |logger -t tag
Francois Lafont
Le #26403180
Bonjour,
Merci de ta réponse, je me rends compte que j'aurais dû être plus précis dans ma question.
On 30/06/2016 07:06, Philippe Weill wrote:
script.sh 2>&1 |logger -t tag


Effectivement ça répond tout à fait à la question.
En revanche, ça suppose que je me fasse un script wrapper qui contient ce que tu indiques
ci-dessus (autrement dit l'appel de mon script pipé dans la commande logger).
Mais est-il possible de faire cela dans le script lui-même sans passer par un wrapper ?
Par exemple avec "exec" etc. ?
--
François Lafont
Paul Aubrin
Le #26403194
On Thu, 30 Jun 2016 11:53:52 +0200, Francois Lafont wrote:
Bonjour,
Merci de ta réponse, je me rends compte que j'aurais dû être plus précis
dans ma question.
On 30/06/2016 07:06, Philippe Weill wrote:
script.sh 2>&1 |logger -t tag

Effectivement ça répond tout à fait à la question.
En revanche, ça suppose que je me fasse un script wrapper qui contient
ce que tu indiques ci-dessus (autrement dit l'appel de mon script pipé
dans la commande logger).
Mais est-il possible de faire cela dans le script lui-même sans passer
par un wrapper ?
Par exemple avec "exec" etc. ?

Peut-être créer un tube nommé avec mknod
Lancer en background (&) un script (ou une ligne avec les commandes) pour
lire le tube et l'envoyer sans la syslog. rediriger stdout et stderr dans
le tube avec des exec.
Benoit Izac
Le #26403230
Bonjour,
Le 30/06/2016 à 11:53, Francois Lafont a écrit dans le message
script.sh 2>&1 |logger -t tag

Effectivement ça répond tout à fait à la question.
En revanche, ça suppose que je me fasse un script wrapper qui contient
ce que tu indiques ci-dessus (autrement dit l'appel de mon script pipé
dans la commande logger).
Mais est-il possible de faire cela dans le script lui-même sans passer
par un wrapper ?

#!/bin/sh
{
# ton script ici
} 2>&1 | logger -t tag
--
Benoit Izac
Francois Lafont
Le #26403384
Bonsoir,
On 30/06/2016 22:48, Benoit Izac wrote:
script.sh 2>&1 |logger -t tag

Effectivement ça répond tout à fait à la question.
En revanche, ça suppose que je me fasse un script wrapper qui contient
ce que tu indiques ci-dessus (autrement dit l'appel de mon script pipé
dans la commande logger).
Mais est-il possible de faire cela dans le script lui-même sans passer
par un wrapper ?

#!/bin/sh
{
# ton script ici
} 2>&1 | logger -t tag

Effectivement c'est tout bête, j'aurais dû y penser. Bien évidemment ça
fonctionne parfaitement. Merci Benoît.
À+
--
François Lafont
Lucas Levrel
Le #26405721
Bonjour,
Je déterre légèrement (disons que j'époussette) ce fil...
Le 30 juin 2016, Benoit Izac a écrit :
Bonjour,
Le 30/06/2016 à 11:53, Francois Lafont a écrit dans le message
script.sh 2>&1 |logger -t tag

Effectivement ça répond tout à fait à la question.
Mais est-il possible de faire cela dans le script lui-même sans passer
par un wrapper ?

#!/bin/sh
{
# ton script ici
} 2>&1 | logger -t tag


Je viens d'utiliser ce « truc », et de m'apercevoir d'un effet de bord :
mon script (bash) commence par « set -e » pour qu'il s'interrompe si l'une
des commandes échoue. Avec le groupage { } ça ne marche plus... je suppose
parce que l'ensemble est considéré comme une unique commande.
Y a-t-il moyen de faire autrement ?
--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Benoit Izac
Le #26405746
Bonjour,
Le 27/07/2016 à 16:57, Lucas Levrel a écrit dans le message
script.sh 2>&1 |logger -t tag

Effectivement ça répond tout à fait à la question.
Mais est-il possible de faire cela dans le script lui-même sans passer
par un wrapper ?

#!/bin/sh
{
# ton script ici
} 2>&1 | logger -t tag

Je viens d'utiliser ce « truc », et de m'apercevoir d'un effet de
bord : mon script (bash) commence par « set -e » pour qu'il
s'interrompe si l'une des commandes échoue. Avec le groupage { } ça ne
marche plus... je suppose parce que l'ensemble est considéré comme une
unique commande.
Y a-t-il moyen de faire autrement ?

Peux-tu donner un exemple minimaliste ?
avec :
#!/bin/sh
set -e
{
echo 'a'
false
echo 'b'
}
ça me sort 'a' et le script s'arrête avec une valeur de retour à 1.
--
Benoit Izac
Nicolas George
Le #26405751
Benoit Izac , dans le message
#!/bin/sh
set -e
{
echo 'a'
false
echo 'b'
}
ça me sort 'a' et le script s'arrête avec une valeur de retour à 1.

Mais si tu ajoutes un « | cat » à la fin, le code de retour est 0 au lieu de
1 car le code de retour d'un pipeline est le code de retour de sa dernière
commande.
Benoit Izac
Le #26405756
Bonjour,
Le 27/07/2016 à 23:22, Nicolas George a écrit dans le message
#!/bin/sh
set -e
{
echo 'a'
false
echo 'b'
}
ça me sort 'a' et le script s'arrête avec une valeur de retour à 1.

Mais si tu ajoutes un « | cat » à la fin, le code de retour est 0 au lieu de
1 car le code de retour d'un pipeline est le code de retour de sa dernière
commande.

Je n'ai pas ce comportement.
--
Benoit Izac
Nicolas George
Le #26405797
Benoit Izac , dans le message
Je n'ai pas ce comportement.

Étrange. Quel protocole as-tu utilisé exactement pour tester ?
Publicité
Poster une réponse
Anonyme