2016-03-16 1 views
0

Nous avons un script de démarrage de serveur qui appelle un terminal Mate (ou un terminal GNOME - ne devrait pas faire la différence) dans le cadre du processus de démarrage du serveur qui, par essence, suit le processus. serveurs d'info journal comme ça:Vérifiez si un terminal Linux spécifique est déjà ouvert

mate-terminal --title="APPSERVER LOG" --working-directory=$SERVER_LOCATION --hide-menubar -e "sh -c 'tail -f --retry -n 400 ./server.log'" & 

maintenant, comme vous pouvez l'imaginer, tout en développant finit avec un bon couple de terminaux ouverts tous les résidus miniers de la même fichier journal à la fin de la journée, causée par plusieurs redémarrage du serveur.

Maintenant, ma question: Est-il possible de vérifier en quelque sorte les terminaux ouverts pour une commande de fonctionnement spécifique, un titre spécifique ou similaire, d'ouvrir un nouveau terminal s'il n'y a pas déjà un tailing?

J'ai vérifié les pages de manuel de mate-terminal, mais je n'ai trouvé aucune solution gérant les fenêtres.

Nous sommes en cours d'exécution et CentOS7 MATE 1.12.1

cat /etc/*release 
CentOS Linux release 7.2.1511 (Core) 
+1

Vous pourriez essayer de grep pid du terminal de ps -ax. Si pid existe, le terminal est ouvert, sinon ce n'est pas le cas. J'espère avoir bien compris ce que tu veux faire. – kitz

+0

@kitz voir mon commentaire dans votre question ci-dessous. – achschneid

Répondre

1

Vous pouvez essayer de grep pid de compagnon comme ceci:

pgrep -d " " -f path/to/mate/terminal/binary 

Et à partir de là vous décidez si est nécessaire d'ouvrir un autre, tuer celui existant, ou ce que vous voulez :)

+0

la chose est que ps ps | grep "mate-terminal" 'ne liste qu'une seule instance mate-terminal, alors que j'ai actuellement> 10 Terminal Windows ouvert ...? '$ ps aux | grep mate-terminal utilisateur + 26601 0,1 0,2 620616 25924? Sl 10:40 0:02 mate-terminal --working-directory =/home -e sh -c "./skript" ' ' pgrep' liste aussi seulement le pid d'un terminal, qui n'est pas celui que je suis à la recherche. Il semble donc que MATE ne génère pas de nouveaux processus pour chaque fenêtre de terminal? – achschneid

+1

Ok mon mauvais, la façon dont nous appelons la queue via 'sh -c' se traduira par la queue étant répertorié comme ' user + 26697 0.0 0.0 107932 688 pts/1 Ss + 10:40 0:00 queue -f --retry -n 400./server.log' donc pas de hit pour "mate" ou "mate-terminal". Quoi qu'il en soit, je devrais être en mesure de grep pour la bonne queue. Merci beaucoup! – achschneid

0

Pour ce que sa valeur: Basé sur @kitz Answer Je maintenant fini par ne pas utiliser pgrep pour obtenir un identifiant de processus et ne pas ouvrir un nouveau ta fenêtre, mais utilisez plutôt pkill pour fermer l'existant et la queue à nouveau. La raison en est que le fichier journal a peut-être été supprimé entre-temps, donc même avec --retry, qui ne fonctionne que pour l'ouverture initiale, la queue d'origine peut avoir perdu le journal.

Alors voici:

TAILCMD="tail -f --retry -n 400 ./server.log" 
pkill -ef "$TAILCMD" 
mate-terminal --title="Server Log" --working-directory=$SERVER_LOCATION --hide-menubar -e "sh -c '${TAILCMD}'" & 

Merci encore @kitz pour moi pointant dans la bonne direction!