Проверьте, открыт ли уже определенный терминал Linux

У нас есть сценарий запуска сервера, который вызывает терминал Mate (или терминал GNOME - не должен иметь никакого значения) как часть процесса запуска сервера, который, по сути, отслеживает информационный журнал серверов следующим образом:

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

Теперь, как вы можете себе представить, в процессе разработки один из них заканчивается несколькими открытыми терминалами, все из которых подключаются к одному и тому же лог-файлу в конце дня, что вызвано несколькими перезагрузками сервера.

Теперь мой вопрос: можно ли каким-то образом проверить открытые терминалы на наличие определенной рабочей команды, определенного заголовка или аналогичного, чтобы открыть новый терминал только в том случае, если еще нет одного хвоста?

Я проверил справочные страницы mate-Terminal, но не смог найти ничего, что могло бы управлять окнами.

Мы работаем с CentOS7 и MATE 1.12.1

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

2 ответа

Решение

Вы можете попытаться получить pid от mate следующим образом:

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

И оттуда вы решаете, нужно ли открывать другое, убивать существующее или что угодно:)

Для чего это стоит: на основе @kitz Ответ Я теперь оказался не использовать pgrep чтобы получить идентификатор процесса и не открывать новое оконечное окно, а использовать pkill закрыть существующий и снова хвост. Причина в том, что файл журнала может быть удален в то же время, так что даже с --retry, который работает только для первоначального открытия, оригинальный хвост, возможно, потерял журнал.

Так вот оно:

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}'" &

Еще раз спасибо @kitz за указание в правильном направлении!

Другие вопросы по тегам