检查特定 Linux 终端是否已打开
Check if a specific Linux Terminal is already open
我们有一个服务器启动脚本,它调用 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 的手册页,但找不到任何可以执行 Window 管理的内容。
我们是 运行 CentOS7 和 MATE 1.12.1
cat /etc/*release
CentOS Linux release 7.2.1511 (Core)
你可以尝试像这样 grep pid of mate:
pgrep -d " " -f path/to/mate/terminal/binary
然后你决定是否有必要打开另一个,杀死现有的,或者任何你想要的:)
它的价值:基于@kitz 的回答我现在结束了不使用 pgrep
来获取进程 ID 并且不打开新的尾部 window,而是使用 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 为我指明了正确的方向!
我们有一个服务器启动脚本,它调用 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 的手册页,但找不到任何可以执行 Window 管理的内容。
我们是 运行 CentOS7 和 MATE 1.12.1
cat /etc/*release
CentOS Linux release 7.2.1511 (Core)
你可以尝试像这样 grep pid of mate:
pgrep -d " " -f path/to/mate/terminal/binary
然后你决定是否有必要打开另一个,杀死现有的,或者任何你想要的:)
它的价值:基于@kitz 的回答我现在结束了不使用 pgrep
来获取进程 ID 并且不打开新的尾部 window,而是使用 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 为我指明了正确的方向!