6
votes

Envoi de stardr à l'enregistreur

im écrit un script Bash pour effectuer une sauvegarde hors site, en utilisant RSYNC sur SSH. Je suis capable d'envoyer STDOUT à l'enregistreur, pour les journaux via xxx

mais je veux envoyer STDERR à la place, alors s'il y a un problème, tel que celui-ci hors site est indisponible, cette sortie doit être envoyée à l'enregistreur et à l'enregistrement.


2 commentaires

Peut-être que vous voulez dire "STDOUT et STDOUT" NON "STDERR à la place".


En fait, je n'étais qu'après STREDR, car il ne devrait pas générer de sortie autrement.


3 Réponses :


7
votes

Vous pouvez rediriger le descripteur STDRERR (2) sur stdout (1) en ajoutant 2> & 1 , par exemple: xxx


0 commentaires

6
votes

Si vous voulez STDERR au lieu de STDOUT (plutôt que STDERR et STDOUT), vous pouvez procéder comme suit:

  1. Ouvrez un autre descripteur de fichier (9) li>
  2. Redirection STDOUT (1) au nouveau descripteur de fichier (9) li>
  3. Rediriger STDERR (2) à StDout (1) LI> ol>

    qui ressemble à ceci: p> xxx pré>

    alternativement, vous pouvez utiliser la substitution de processus: p>

    logger -i <( rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ me@offisite:backup > /dev/null )
    


0 commentaires

3
votes

Une autre façon de vous assurer que vos erreurs de script sont capturées ainsi que les erreurs RSYNC, est de faire quelque chose comme ceci: xxx

maintenant, toutes les données écrites à stardr seront enregistrées, pas seulement de rsync. Cependant, ignorer stdout est typiquement une mauvaise idée lorsqu'il s'agit de déboguer, car des informations utiles pouvant mettre en évidence la cause d'une erreur pourraient être enregistrées là-bas. Si vous souhaitez différencier STDERR et STDOUT, ne traverser les flux : xxx

Pour fermer explicitement les poignées ou les restaurer, envisagez Les éléments suivants: xxx

pour les versions plus anciennes de bash, vous devrez peut-être être un peu plus émoussé: xxx


1 commentaires

Merci de me montrer le N >> (Dothis ...).