Je fais un script de sauvegarde pour LDAP. Je veux que les erreurs aillent dans un fichier dans / var / log et la sortie dans un autre fichier dans le dossier de sauvegarde. Actuellement, je redirige vers un fichier temporaire, puis j'envoie le fichier temporaire au journal. Je préfère cependant le faire en 1 doublure ...
/usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err |
gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz ||
logger -t ldapbackup -p local6.err error exit $?
cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" |
grep -v "filter: (objectclass=\*)" |
grep -v "requesting: All userApplication attributes" >$ERR_LOG
rm -f /tmp/ldaptmp.err
Des idées sur la façon de rediriger stderr et stdout vers différents tuyaux pour condenser cette commande en 1 ligne? Ou existe-t-il une meilleure façon?
Réponses:
Comme indiqué par cette réponse à Unix SE:
MyWeirdCommand.sh
testRedirection.sh:
Rendements courants:
stderr.log
6
stdout.log
1
la source
Dans Bash, vous pouvez utiliser la substitution de processus pour gérer les descripteurs de fichiers supplémentaires pour vous. Vous pouvez trouver cela un peu plus net que la méthode d'échange de descripteurs de fichiers.
Votre commande pourrait ressembler à ceci:
la source
>(process)
notation?Voici comment j'imprime stdout et stderr pour séparer les fichiers avec des horodatages (piping to ts depuis le paquet Debian moreutils):
PS si vous n'avez pas ts, faites votre propre alias:
la source