shell - 通过 shell 脚本检查 Tomcat 是否正在运行

标签 shell tomcat

我需要通过 shell 脚本检查 Tomcat 是否在我的系统中运行。如果不是,我需要捕获进程 ID 并终止 Tomcat。如何实现?

最佳答案

为了获取正在运行的进程,我使用了这个命令:

ps x | grep [full_path_to_tomcat] | grep -v grep |剪切-d ' ' -f 1

但你必须要小心。它适用于我的设置,但它可能无法在任何地方运行...我有两个 tomcat 安装,一个是端口 8080 上的/usr/local/tomcat 和端口 8081 上的/usr/local/tomcat_8081。我必须使用 '/usr/local/tomcat/'(带最后一个斜杠)作为完整路径,否则如果 tomcat_8081 也在运行,它将返回 2 个不同的 pid。

下面是这个命令作用的解释:

1) ps x 为您提供按 pid、tty、stat、运行时间和命令排序的运行进程列表。

2) 对其应用 grep [full_path_to_tomcat] 将在该列表中找到模式 [full_path_to_tomcat]。例如,运行 ps x | grep/usr/local/tomcat/ 可能会得到以下信息:

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]
21149 pts/0    S+     0:00 grep /usr/local/tomcat/

3) 由于 grep/usr/local/tomcat/ 匹配模式,我们得到 2 个条目而不是一个条目,让我们删除它。 -v 是 grep 的反向匹配标志,这意味着它将只选择与模式不匹配的行。因此,在前面的示例中,使用 ps -x | grep/usr/本地/tomcat/| grep -v grep 将返回:

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]

4) 很酷,现在我们有了所需的 pid。尽管如此,我们仍需要剥离所有其余部分。为此,让我们使用cut。此命令从 FILE 或标准输出中删除部分。 -d 选项是分隔符,-f 是您需要的字段。伟大的。所以我们可以用一个空格(' ')作为分隔符,得到第一个字段,对应pid。运行 ps x | grep/usr/本地/tomcat/| grep -v grep | cut -d ' ' -f 1 将返回:

13277

这就是您所需要的。要在您的脚本中使用它,很简单:

#replace below with your tomcat path
tomcat_path=/users/tomcat/apache-tomcat-8.0.30
pid=$(ps x | grep "${tomcat_path}" | grep -v grep | cut -d ' ' -f 1)
if [ "${pid}" ]; then
  eval "kill ${pid}"
fi

关于shell - 通过 shell 脚本检查 Tomcat 是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898686/

相关文章:

python - 使用 KeyboardInterrupt 异常捕获 SIGINT 在终端中有效,而不是在脚本中有效

java - 使用 Apache-tomcat 保护应用程序

apache - 在 apache web 服务器后面的 tomcat 中检查对 Apache web 服务器的请求是否为 https

linux - 是否可以将两个 tr 命令合二为一?

java - 如何启用 java HotSpot VM 编译器

tomcat - Struts2 Tomcat,Tomcat 如何知道 JSP 的运行位置?

eclipse - 在 STS Eclipse 中从默认设置更改新的 Tomcat 设置

bash - bash 的字符串长度

php - 解析 grep 输出

linux - 如何将 "which somemodule"的输出路径作为 "ls"的参数?