【问题标题】:SSH Server status in PythonPython 中的 SSH 服务器状态
【发布时间】:2013-03-16 08:31:46
【问题描述】:

我想知道是否有办法使用 Python 找出系统中ssh server 的状态。我只想知道服务器是否处于活动状态(只是是/否)。即使它只是一个 linux 命令也会有所帮助,这样我就可以使用来自 subprocess 模块的 python 的 popen 并运行该命令。

谢谢

PS:我在linux (ubuntu 12.04)上使用openssh-server

【问题讨论】:

  • 你是指本地服务器吗?你已经尝试了什么?
  • @wRAR,是的,我在同一台机器上运行 python 脚本。我曾尝试 ping 端口 22(使用 python 的 Popen)和类似的东西。想知道一些简单的事情...

标签: python python-2.7 ssh openssh


【解决方案1】:

如果您想要一种通用的方式来判断进程是否正在运行,您可以使用ps

def IsThisProcessRunning( ps_name ):
  ps = subprocess.Popen("ps axf | grep %s  | grep -v grep" % ps_name, 
                        shell=True, stdout=subprocess.PIPE)
  output = ps.stdout.read()
  ps.stdout.close()
  ps.wait()

  if re.search(ps_name, output) is None:
      return False
  else:
      return True

IsThisProcessRunning('/usr/sbin/apache2') # True, if Apache2 is running.

如果你有一个常用的名字;您可以指定位置,例如/usr/sbin/apache2

为了安全起见,您可以结合查找进程名称,同时查找 pid 文件。这是init.d 脚本中常用的技术。

try:
    pf = file('/var/run/my_program.pid', 'r')
    pid = int(pf.read().strip())
    pf.close()
except IOError:
    pid = None

if pid:
   # Process is running.

【讨论】:

  • 为什么我需要用[]包裹第一个字母?
  • 否则会返回 ps 命令,例如grep --colour=auto ssh.
  • @sandeepraju 我更新了源代码,删除了 grep 而无需括号。
  • 还有psgrep。或者,您可以自己搜索/proc 文件系统。
  • 是的,如果程序有一个 pid 文件,你也可以检查它是否存在,但我更喜欢使用 pid + ps。
【解决方案2】:

运行service sshd status(例如通过Popen())并阅读它告诉你的内容。

【讨论】:

  • 当我在控制台上尝试该命令时,它显示sshd: unrecognized service。然后我尝试了service ssh status,它起作用了.. 说,ssh start/running, process 787
  • 是的,我认为这取决于您使用哪个发行版,服务名称是什么。无论如何,我希望这会有所帮助,您可以解析它的输出(或者只是深入了解该命令的工作原理,以便您可以执行它的工作)。
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
相关资源
最近更新 更多