linux - 检查程序是否正在特定节点上运行

标签 linux bash shell unix

我找到了这个脚本来检查程序是否正在运行。但我确实有多个服务器(它是一个 Spark 集群),我的程序可能在其中运行。

使用此脚本,我需要在实际程序运行的同一节点上运行 shell 脚本。然后只有我才能找到该服务。

#!/bin/sh
SERVICE='myProgram'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running, everything is fine"
else
    echo "$SERVICE is not running"
    echo "$SERVICE is not running!" | mail -s "$SERVICE down" root
fi

任何人都可以帮我编写一个程序来检查进程是否正在我列出的任何一台服务器上运行吗?如果不是,我需要给操作系统返回非零代码。

就像当 shell 脚本在 server1 上运行时,我需要 ssh 到 node2 并检查程序是否正在运行。

最佳答案

此脚本将是您问题的一个很好的起点。 您可以使用可以 ssh 的用户在您的一台服务器上运行此脚本 到其他服务器无需密码。 我想您知道 ~/.ssh/id_rsa.pub~/.ssh/authorized_keys 文件的作用。 我希望您能学到一些该脚本所需的 bash 知识。

#!/bin/bash

SERVICE='myProgram'
nodes="nodeA nodeB nodeC nodeD"

rm -f err.log 2>/dev/null

for nd in $nodes ; do
  rm tmp_file 2>/dev/null
  ssh -o "NumberOfPasswordPrompts 0" -o "StrictHostKeyChecking no" $nd \
      ps ax |grep -vw grep  >tmp_file 2>>error.log
  test -s tmp_file || { printf "$nd: SSH failed\n" |tee -a error.log; continue; }
  if (( `grep -cw "$SERVICE" tmp_file` > 0 ))
  then
      echo "$SERVICE service running on $nd, everything is fine"
  else
      echo "$SERVICE is not running on $nd"
      echo "$SERVICE is not running on $nd!" | mail -s "$SERVICE down on $nd" root
  fi
done

关于linux - 检查程序是否正在特定节点上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40473427/

相关文章:

c - 如何通过 libcurl 传输从 libxml2 读取的字符串?

linux - 如何在 usb-vhci 中启动 USB 批量传输

regex - fgrep 匹配文字 "*"

bash - 如何使用 bash 命令删除 html 标签内的空格

linux - Shell 脚本 : Count files, 删除 'X' 最旧的文件

linux - 如何仅获取最后一次发送的期望脚本的输出

jquery - $ 未在 sugarcrm 中定义且不重复

linux - 脚本编写 - 使用 While 循环迭代数字(newusers 命令)

shell - 测试运算符 -a 和 -o 是否短路?

c - 关于 _mm_clflush (void const* p)