我有一个脚本,使用ps -ef
和一些grep
检查进程是否正在运行。如果进程正在运行,它什么都不做。如果进程没有运行,它会重新启动进程,然后向我发送一封电子邮件,说明进程已经死亡。
此脚本目前从管理员帐户的crontab运行5分钟。
Peusdocode +问题代码:
#!/bin/sh
# declare a ton of environment variables.
ATONOFVARS=/lots/of/qualified/paths
# declare relevant logging functions
loggingFunction()
# declare failure message to pass into mail (real code)
PAGEMESSAGE="MyServer: process not found in ps -ef. Attempting to Restart... Please check log file in /tmp"
PAGESUBJECT="ProcessHealthCheck.sh - MyServer: process not found in ps -ef"
EMAILLIST="my.email@mycorp.com"
# do the actual check (back to peusdo code)
if [ $(ps -ef | grep process | grep adminAccount | grep -v grep | wc -1) ]
restartProcess()
FAILURE=1
fi
# log the failure and send an email to me (real code)
if [ $FAILURE -eq 1 ]
then
logMsg ""
logMsg "The process is not detected in ps -ef!"
logMsg "Restarting..."
logMsg ""
#send emails out
echo $PAGEMESSAGE | mail -s $PAGESUBJECT $EMAILLIST
fi
为了测试这个,我故意杀死了我想监视的进程的PID,所以这个cronjob必须重新启动它,我还想测试电子邮件功能。该脚本完全按照我的意愿重新启动我的进程,然后收到电子邮件。
然而,电子邮件在邮件正文中说:“MyServer:process not found in
the entire listing of ps -ef
。尝试重新启动...请检查/ tmp中的日志文件。此外,电子邮件发送到的地址也是来自ps -ef
的行。在我的电子邮件中有2000个收件人。示例地址:{{ 1}},grep@myServer.mydomain.com
有谁知道最近发生了什么?为什么process@myServer.mydomain.com
执行字符串中的命令?由于发现了这一点,我更改了字符串以消除unix命令的任何可能性。