10
votes

Log et Mail de queue et Grep (Linux)

Je veux queuner le fichier journal avec grep et l'envoyer par courrier Comme: xxx

Comment puis-je faire cela?


3 commentaires

Cette question est comme "j'ai print (" foo '); et je veux qu'il imprime "foo". Comment puis-je faire ça? " Qu'est-ce que est votre question?


Vous ne voulez probablement pas queue -f car cela suivra continuellement le bas du fichier. Grep ne queue enregistre non plus. Quel est le problème que vous essayez de résoudre?


queue -f .. | grep ... est de produire des données annexées comme le fichier se développer et avec l'utilisation de GREP, il n'imprime que des lignes ajoutées uniquement


3 Réponses :


2
votes

Je vais aller à cela. J'apprendrai peut-être quelque chose si mon code Icky Bash est scruté. Il y a une chance qu'il y a déjà des solutions de Gazillion pour le faire, mais je ne vais pas savoir, car je suis sûr que vous avez chassé les profondeurs et les largeurs du cyberocéen. Cela ressemble à ce que vous voulez peut être séparé en deux bits: 1) à intervalles réguliers, obtenez la "queue la plus récente" du fichier, 2) si la dernière queue existe réellement, envoyez-la par e-mail. Pour les intervalles réguliers en 1), utilisez cron. Pour obtenir la dernière queue en 2), vous devrez garder une trace de la taille du fichier. Le script Bash ci-dessous fait cela - c'est une solution à 2) qui peut être invoquée par Cron. Il utilise la taille du fichier mis en cache pour calculer le morceau du fichier nécessaire à la poste. Notez que pour un fichier myfile un autre fichier .Offset.myfile est créé. En outre, le script n'autorise pas les composants de chemin dans le nom du fichier. Réécrire ou résoudre le problème dans l'invocation [par ex. (CD / FOO / BAR && SEGTAIL.SH ZUT), en supposant qu'il s'appelle segtail.sh]. XXX


4 commentaires

La partie GREP à votre question n'a pas été répondue à cela. Laissé comme exercice.


Besoin de citations complètes autour des expansions variables de nom de fichier. Le chemin d'accès à bash n'est pas correct pour tous les systèmes; peut-être invoquer via env . La sortie de STAT est très variable entre les systèmes et les versions (!). Présumer des statistiques récentes GNU, try -c pour résoudre ce problème et éviter la nécessité d'analyser.


Non CAT NÉCESSAIRE: OFFSET = $ (<. Décalage. $ Fichier) . La deuxième partie de si [-e $ dollar && $ taille> $ offset]] est une comparaison lexicale de sorte que cela ne fera pas ce que vous attendez si, par exemple, $ Taille < / code> == 10 et $ décalset == 2. Utilisez cela à la place: si [[-E $ dossier]] && (($ Taille> $)) . Vous pouvez omettre des panneaux dollar dans la plupart des cas à l'intérieur (()) et $ (()) .


Suivi la plupart des suggestions - merci (> comparaison mordez encore une fois, ARGH). Je ne peux pas voir mon message de commettre (encore?), Je ne sais pas pourquoi. Je ne vise pas la portabilité totale et je n'aime pas vraiment env, aussi, je vais enquêter sur "la plupart" dans "dans la plupart des cas".



23
votes

Vous voulez envoyer un email lorsque des erreurs de courrier électronique se produisent? Cela pourrait échouer;)

Vous pouvez cependant essayer quelque chose comme ceci: xxx

lequel pour chaque ligne de la sortie GREP envoie un email.

Exécutez au-dessus du script shell avec xxx

afin de continuer à fonctionner en arrière-plan.


7 commentaires

Vous n'avez pas besoin des barres obliques arrière - la coquille se tournera vers la ligne suivante pour un tuyau de fin (et aussi & , && et || )


Supposons que je souhaite imprimer 10 lignes après l'erreur (GREP -A 10 erreur). Dans votre approche, je recevrai 10 courriels, que dois-je faire pour ne recevoir qu'un seul courrier, y compris les 10 lignes?


@Markus avez-vous trouvé une approche pour faire ce que vous avez demandé


Je pensais à un crontask à Grep le fichier journal à l'aide de la dernière longueur de ligne connue (WC -L) et de nouvelles occurrences de courrier électronique uniquement. De cette façon, le script ne fonctionne pas tout le temps. Ensuite, je devrais comprendre comment réinitialiser le décompte de mot chaque fois que le journal tourne. Je suis surpris qu'il n'y ait pas de scripts déjà écrit pour faire cela ... De nombreux administrateurs ont ce besoin mais ne veulent pas utiliser un outil de paiement.


Ce n'est qu'alors que vous devrez rechercher le fichier entier pour ces terminaisons de ligne avec WC, puis à nouveau avec la queue pour obtenir les dernières lignes.


Je suis nouveau à script, mais cela semblait être moins taxé au journal Grep toutes les 10 minutes au lieu de la fixation de manière permanente.


La commande dans la réponse est une queue suivante, c'est-à-dire; La queue sondera (ou surveillera) le fichier pour modifier et émettre les nouvelles lignes lorsqu'il leur détecte. Le GREP dormira quand il n'y a pas d'entrée à venir.



0
votes

Que diriez-vous:

mail -s "catalina.out erreurs" bla@myaddress.com


0 commentaires