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