为我的应用服务器运行 df -k 命令,它有挂载问题,所以需要触发邮件

Posted

技术标签:

【中文标题】为我的应用服务器运行 df -k 命令,它有挂载问题,所以需要触发邮件【英文标题】:Running df -k command for my application server,and it is having mount issue,so need to trigger a mail 【发布时间】:2014-07-22 07:26:22 【问题描述】:

我正在为我的应用程序服务器运行df -k 命令,但它遇到了挂载问题。

所以我需要触发一封邮件说服务器有挂载问题。

我的基本问题,我将编写一个shell脚本来运行df -k命令并确定该命令是否需要很长时间才能完成该命令,然后我需要触发一个邮件。

我该怎么做?

【问题讨论】:

什么意思,'mount issue'?您是否在谈论过时的网络(NFS?)挂载? 【参考方案1】:

这个问题列出了检测过时 NFS 挂载的方法:Is there a good way to detect a stale NFS mount

选择一个解决方案并在 df -k 之前运行它。

或者,您可以将stderr 重定向到stdout,然后用grep 查找错误模式:

df -k 2>&1 | grep ...error...
if [[ $? -ne 0 ]]; then
    ...send mail...
fi

【讨论】:

谢谢亚伦。但这不起作用。我使用了 ssh web@web-slapp5 df -k | grep not.但我没有得到任何输出。它卡在 df -k 命令本身。 最终,df 命令将超时。上面的代码需要进入一个脚本,你必须使用ssh 调用它。您的代码将远程运行df -k,然后在本地运行 grep。如果您想避免等待,您需要查看链接背后的解决方案。【参考方案2】:

目前尚不清楚您要归档的具体内容;但是计算一个命令需要多长时间是相当容易的,例如:

#!/bin/sh

start=$(date +%s)
out=$(sleep 6)
took=$(($(date +%s) - $start))

if [ $took -gt 5 ]; then
    echo "$out" | mail -s "Command took too long" test@example.com
fi

编辑

这需要命令完成;如果你想超时,我建议使用 Python。 可以使用 shell 脚本,但恕我直言,这要容易得多。

#!/usr/bin/env python

import subprocess, smtplib
from email.mime.text import MIMEText

proc = subprocess.Popen(['sleep', '100'])
try:
    proc.wait(5)  # 5 is the timeout in seconds
except subprocess.TimeoutExpired:
    proc.kill()

    # Send email
    msg = MIMEText("Command took too long\r\n")
    msg['Subject'] = 'Command took too long'
    msg['From'] = 'test@example.com'
    msg['To'] = 'test@example.com'
    s = smtplib.SMTP('localhost')
    s.sendmail('test@example.com', ['test@example.com'], msg.as_string())
    s.quit()

【讨论】:

非常感谢 Carpetsmoker。但这只有在命令成功完成时才有效,对吗?安装问题类似于创建一些安装点以共享远程服务器中的文件夹。如果主机服务器无法连接到该远程服务器,df -k 命令将继续加载,不允许我们键入下一条命令。我们需要手动使用 CTRL+C 来终止该命令。 @GopalKrishnan 没错,我添加了一个超时示例。 您好,请告诉我如何创建pythol文件。hte文件的扩展名是什么以及如何运行该文件? 通常的扩展名是.py。您可以只使用python file.py,或使其可执行并使用./file.py... 文件“./mount_check_Allservers.sh”,第 6 行,在 proc = subprocess.Popen(['sh weblogic@web-preapp5 df -k', '100']) 文件“ /usr/lib/python2.6/subprocess.py”,第 621 行,在 init errread, errwrite) 文件“/usr/lib/python2.6/subprocess.py”,第 1126 行,在_execute_child raise child_exception OSError: [Errno 2] No such file or directory

以上是关于为我的应用服务器运行 df -k 命令,它有挂载问题,所以需要触发邮件的主要内容,如果未能解决你的问题,请参考以下文章

nfs非正常情况下断开,无法重新挂载,且无法使用df -h 命令的解决方法

linux命令之添加删除磁盘分区

linux文件系统管理及挂载

centos7 挂载数据盘

df命令

df 命令