はじめに
-
今回のこの記事を書こうと思ったのは、前回のcronについてのまとめとよくあるエラーでcronについてのまとめを書いたので、前回に続いてcronを利用したプロセス監視について書こうと思います。
-
前回と同じく初心者向けの記事になります。
-
cronについては細かく書かないので、cronについてあまり知らない方は前回の記事を閲覧するか、調べて頂いてから見ると分かりやすいかと思います。
スクリプト概要
-
プロセス監視
-
pgrepで対象のプロセス一覧を表示し、その一覧から監視しているスクリプトが何個起動しているか確認する。
-
その結果をif文で分岐して、分岐内の必要な処理をする。
コード
vi
crontab -e
*/5 * * * * /bin/sh shell.sh
ShellScript
# ! /bin/bash
PROCESS_NAME=nginx
count=`pgrep $PROCESS_NAME | wc -l`
if [ $count = 0 ]; then
echo "$PROCESS_NAME is stop"
systemctl start nginx
echo "$PROCESS_NAME is Start"
else
echo "$PROCESS_NAME is running"
fi
解説
vi
crontab -e
*/5 * * * * /bin/sh shell.sh
//crontabの中に上記のように記述すると5分毎に設定したシェルを実行するようになります。
*/5 * * * * /bin/sh shell.sh >> /任意の場所/log.txt 2>&1
//もしファイルとして実行した内容を残したければこのように記述することもできます。
//2>&1で標準出力とエラーを混ぜて出力されます。
ShellScript
# ! /bin/bash
//これはシェルを書く上での決まり文句みたいなものですね。
PROCESS_NAME=nginx
//ここで監視したいプロセスを定義します。今回だとnginxですね。
count=`pgrep $PROCESS_NAME | wc -l`
//動作しているプロセスをカウントしたいのでプロセスの数を数えて変数に代入します。
//pgrepでパターンにマッチしたプロセスIDの一覧を取ってくる。
// |(パイプライン)でwc -lを繋いでプロセスの行数を取ってくる。
※余談ですが、wcはword countが名前の由来で行数以外にも単語・バイト数なども表示できます。
if [ $count = 0 ]; then
echo "$PROCESS_NAME is stop"
systemctl start nginx
echo "$PROCESS_NAME is Start"
else
echo "$PROCESS_NAME is running"
fi
//このif文で先程定義したプロセスの数が0の場合はnginxが停止していることが分かるので上記のような起動するシェルを書きます。
//そうでない場合は、nginxのプロセスが正常に起動しているので、それに対してecho "$PROCESS_NAME is running"と返します。
- このcronの設定と解説したシェルスクリプトを組み合わせると簡単ですが、5分毎にシェルを実行してプロセスの確認を行い、もしプロセスが停止していた場合は自動で起動するようにできます。
参考サイト
- 下記の記事などを閲覧するとシェルスクリプトについて理解が深まると思います。
初心者向けシェルスクリプトの基本コマンドの紹介
[UNIX&Linuxコマンド・シェルスクリプトリファレンス]
(https://shellscript.sunone.me/tutorial.html)
最後に
今回は前回書いた記事の続きでcronを利用したプロセス監視についての記事を書きました。
間違いなどありましたらコメント等で教えて頂けると私の勉強にもなるので是非お願いします。
次回はVagrantやミドルウェアの設定などについての記事が書けたら良いなと思っています。