0

我有一个拥有 1500 个进程 ID 的服务器应用程序,我需要一个 shell 脚本,它每小时检查一次进程是否启动,如果没有启动进程,则使用“dsmc -u xxxx -p * *”如果它没有启动发送一个邮寄到我的 gmail(xxx@gmail.com)。这是我如何向我的 gmail 帐户发送邮件的代码。

   if pidof -s vsftpd = /dev/null; then
      echo 'ftp is stopped'

       sudo /etc/init.d/vsftpd restart
  else 
       echo "The FTP server is Down" | mail -s "Ftp Server is Down" abcd@example.com
   fi

我的 Gmail 帐户没有收到邮件。参考:http ://rtcamp.com/wordpress-nginx/tutorials/linux/ubuntu-postfix-gmail-smtp/

4

3 回答 3

0

我们可以用 ps -ef 来做脚本

尝试,

 # cat vsftpd.sh
 #!/bin/bash
 /bin/ps -ef | grep vsftpd > /dev/null 2>&1
 if [ $? -ne 0 ]
 then
 /etc/init.d/vsftpd restart > /dev/null 2>&1
 /bin/mail -s "FTP service is RESTARTED now" abcd@example.com
 else
 sleep 0
 fi

计划:

 * * * * * /bin/sh /path/to/vsftpd.sh > /dev/null 2>&1
于 2013-11-09T18:19:32.687 回答
0

脚本部分很容易做到。然而,邮件故障排除并非如此。我建议在屏幕中运行脚本(screen -d -m /bin/bash "test.sh"),分离屏幕(ctrl -a + d)然后终止进程(/etc/init.d/vsftp stop) ,等待 1 分钟,然后重新连接屏幕 (screen -r)。这将为您提供可以解决的邮件错误。

以下脚本将为您监控您的服务。

    #!/bin/bash

process="vsftp"

while true ; do

  until [ ! $(pgrep $process) ]; do
        sleep 1 #The number or minutes to wait until next check
  done

  #If process is not found do the following
  /etc/init.d/$process start > /dev/null #Run as root because sudo requires password
  if [ $? != 1 ]; then
  echo "The FTP server was restarted" | mail -s "Ftp Server $process was restarted" abcd@example.com
  else
  echo "The FTP server could not restart" | mail -s "Ftp Server $process is down" abcd@example.com
  sleep 1
  exit 0;
  fi

done

希望这会有所帮助,祝你好运。

于 2013-10-17T10:06:27.817 回答
0

要编写脚本,您可能需要研究以下函数及其相关的手册页

ps pgrep ptree 邮件

于 2013-10-14T10:11:57.337 回答