logger le stderr et stdout un script dans le syslog
18 réponses
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 ?
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
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 ?
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
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
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. ?
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
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.
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.
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
Bonjour, Le 30/06/2016 à 11:53, Francois Lafont a écrit dans le message <5774ec30$0$3326$ :
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
Bonjour,
Le 30/06/2016 à 11:53, Francois Lafont a écrit dans le message
<5774ec30$0$3326$426a34cc@news.free.fr> :
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 ?
Bonjour, Le 30/06/2016 à 11:53, Francois Lafont a écrit dans le message <5774ec30$0$3326$ :
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
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
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.
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
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 <5774ec30$0$3326$ :
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 Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
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
<5774ec30$0$3326$426a34cc@news.free.fr> :
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.
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 <5774ec30$0$3326$ :
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
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
Bonjour,
Le 27/07/2016 à 16:57, Lucas Levrel a écrit dans le message
<alpine.LSU.2.20.13.1607271653390.4472@coulomb.u-pec.fr> :
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.
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
Benoit Izac , dans le message , a écrit :
#!/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 , dans le message <87invqvo0i.fsf@izac.org>, a écrit :
#!/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.
#!/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
Bonjour, Le 27/07/2016 à 23:22, Nicolas George a écrit dans le message <5799260b$0$5275$ :
#!/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
Bonjour,
Le 27/07/2016 à 23:22, Nicolas George a écrit dans le message
<5799260b$0$5275$426a74cc@news.free.fr> :
#!/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.
Bonjour, Le 27/07/2016 à 23:22, Nicolas George a écrit dans le message <5799260b$0$5275$ :
#!/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
Benoit Izac , dans le message , a écrit :
Je n'ai pas ce comportement.
Étrange. Quel protocole as-tu utilisé exactement pour tester ?
Benoit Izac , dans le message <87popy2z8e.fsf@izac.org>, a écrit :
Je n'ai pas ce comportement.
Étrange. Quel protocole as-tu utilisé exactement pour tester ?