Проверьте, открыт ли уже определенный терминал 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 за указание в правильном направлении!