www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。

Linux サーバプロセス監視プログラム

----------------------------------------------------------------
 perl で作成したプロセスを監視するプログラムの一例です。
----------------------------------------------------------------
プログラムは、match関数を使ったコードを使用しています。
match関数は、一般的には、~ m/(一致を取りたい文字列)/mですが、m を前置すると 正規表現を囲う記号にスラッシュ以外を用いることができるので " [ , ] " を使用 し、パス文字列中の " / " と混在しない様にしました。
match関数の後ろの m は、すべての行を検索対象にする指定です。
----------------------------------------------------------------
監視しなければならないプロセスは、httpd,sshd,proftpd,vsftpd,DiCE があります。
各プロセスの起動確認情報は、コマンド ps -ef の出力文字列に下記に列挙した 文字列が有るか無いかで判断しています。

 httpd   ---> /usr/local/apache2/bin/httpd
 sshd  ---> /usr/sbin/sshd
 proftpd  ---> proftpd:
 vsftpd  ---> /usr/sbin/vsftpd
 DiCE  ---> /usr/local/DiCE/diced

----------------------------------------------------------------
 crontab への設定は、下記の様にします。/○○/○○○.pl は、プログラムの保存先 ディレクトリとプログラム名です。 > /dev/null 2>&1 は、忘れないようにして下さい。
 忘れた場合には、root 宛てのメールに「 実行結果 」が 1 分毎に記録されます。

 参考までに、/dev/null とは、
    nullデバイスでコマンド等の実行結果をすべて捨てる指定です。
    ここに書込むことによってメッセージは、すべて破棄されます。
    2>&1 とは、エラーメッセージを捨てる指定です。
  * * * * * /var/www/○○/○○○.pl > /dev/null 2>&1
------------------------------------------------------------------


#!/usr/bin/perl
#----------------------------------------------------------
# 
# sshd, httpd, proftpd or vsftpd, DiCE の動作プロセスを監視
# 停止している時には、起動させます
#
#----------------------------------------------------------
use strict;
my $F_SSHD  = 0;   #  起動チェックフラグ OFF
my $F_HTTPD = 0;
my $F_FTPD  = 0;
my $F_DICE  = 0;
#-------------   ps コマンド起動   ------------------------
#
my $PS_DATA = `ps -ef`;
#
#----------------   sshd   --------------------------------------
  if ( $PS_DATA=~ m[/usr/sbin/sshd]m) { $F_SSHD++; }
#----------------   httpd-2.4-10  -------------------------------
  if ( $PS_DATA=~ m[/usr/local/apache2/bin/httpd]m)\
 { $F_HTTPD++; }
#----------------  proftpd  -------------------------------------
  if ( $PS_DATA=~ m[proftpd:]m) { $F_FTPD++; }
#----------------  vsftpd  --------------------------------------
  if ( $PS_DATA=~ m[/usr/sbin/vsftpd]m) { $F_FTPD++; }
#----------------   DiCE   --------------------------------------
  if ( $PS_DATA=~ m[/usr/local/DiCE/diced]m) { $F_DICE++; }
#----------------------------------------------------------------
#  起動チェックフラグが 0 だったら起動する。
#  起動チェックフラグが 1 の時には、起動中のメッセージ表示をする。 
#----------------------------------------------------------------
if ( $F_SSHD == 0 ) { system("/etc/rc.d/init.d/sshd start"); }
   else { print "sshd    active (running)\n"; }

if ( $F_HTTPD == 0 ) { 
             system("/usr/local/apache2/bin/apachectl start"); }
   else { print "httpd   active (running)\n"; }

#if ( $F_FTPD == 0 ) { system("/etc/rc.d/init.d/vsftpd start"); }
#   else { print "vsftpd active (running)\n"; }

if ( $F_FTPD == 0 ) { system("/etc/rc.d/init.d/proftpd start"); }
   else { print "proftpd active (running)\n"; }

if ( $F_DICE == 0 ) { system("/usr/local/DiCE/diced -d -l"); }
   else { print "DiCE    active (running)\n"; }
#----------------------------------------------------------------

この perl のプログラムを実行した結果は、下記の様になります。
チェックしたプロセスは、すべて稼働している状態です。


sshd  active (running)
httpd  active (running)
proftpd active (running)
DiCE  active (running)

-----------------------------------------------------------------