Je redirige actuellement la sortie d'un outil de surveillance vers un fichier, mais ce que j'aimerais faire, c'est rediriger cette sortie vers un nouveau fichier à ma demande (en utilisant un raccourci clavier), sans arrêter ledit outil.
Quelque chose comme
monitor_program | handle_stdout
Où handle_stdout
me permet de définir un nouveau fichier où mettre le journal à un certain point.
Je sais que je pourrais facilement l'écrire, mais je me demande s'il existe un outil qui le permet déjà.
bash
pipe
io-redirection
stdout
Treviño
la source
la source
logrotate
manuellement un fichier de configuration personnalisé, selon le comportement de votre moniteur_programme, mais c'est quelque peu hack.Réponses:
Je suggère une pipe nommée.
Créez un tuyau
mkfifo p
(appelez-le comme vous voulez, sinon «p»)Créez un script "lecteur" qui lit à partir du tuyau et écrit où vous voulez
Dites au programme de surveillance d'écrire ses journaux dans le canal nommé
Voici un exemple de script de lecture qui lit à partir d'un canal nommé «p» et écrit les données dans un fichier «mylog» indexé:
la source
read
etprintf
au lieu de justecat <p >> mylog."$INDEX"
?S'appuyant sur votre idée SIGINT, ici en utilisant SIGQUIT ( Ctrl+\), vous pouvez toujours utiliser Ctrl+Cpour arrêter le tout:
Cela suppose que ce
cat
n'est pas une fonction intégrée dans votre shell (il est donc interrompu lorsque vous appuyez sur Ctrl+\).Notez que, comme dans votre approche, il est possible que le SIGQUIT soit livré au mauvais moment (lors de l'appel du système d'écriture), entraînant la perte de certaines données.
la source
Vous pouvez probablement utiliser
less
et enregistrer à partir de là en tapant sle nom du fichier dans lequel vous souhaitez enregistrer, puis Enter. De Comment écrire toutes les lignes de moins dans un fichier? .la source
Sans en savoir plus sur votre "demande", il n'est pas vraiment possible de répondre. S'il était basé sur la taille ou l'intervalle du fichier, les rotatelogs (qui devraient être fournis avec Apache httpd) fonctionneraient.
la source
Grâce à la réponse de Jeff Schaller , je me suis retrouvé avec quelque chose comme ça, qui fait essentiellement ce dont j'ai besoin, appelons-le
reader.sh
:Ensuite, il s'agit simplement de créer un canal nommé avec
mkfifo p
et d'utiliser deux terminaux oùmonitor_program > p
etreader.sh
sont en cours d'exécution. Je peux alors arrêter le lecteur pour définir un nouveau journal en utilisant Ctrl+ Cet entrer un nouveau nom. Ctrl+ Z, comme d'habitude alors pour arrêter et le tuer.la source