Help us understand the problem. What is going on with this article?

【初心者向け】cronを利用したプロセス監視

はじめに

  • 今回のこの記事を書こうと思ったのは、前回の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コマンド・シェルスクリプトリファレンス

最後に

今回は前回書いた記事の続きでcronを利用したプロセス監視についての記事を書きました。
間違いなどありましたらコメント等で教えて頂けると私の勉強にもなるので是非お願いします。
次回はVagrantやミドルウェアの設定などについての記事が書けたら良いなと思っています。

shark_No95
サメになりたいと思いながら日々過ごしているエンジニア(仮)です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした