はじめに
こんにちは、実務経験半年のエンジニアのTunです。
今回は、初案件で学んだことの備忘録になっています。
案件に入るや否や、未経験で四苦八苦しながら詳細設計を作成し、プログラム製造、単体試験、総合試験を経て、無事、リリースすることができました。
今回の初案件で、多くのことを学びましたので、cron
についてですが、今後はいろいろなことを書いていきたいと思います。
cronとは何ぞや?
cronとは、ジョブを自動実行するためのデーモンプロセスです。
Linuxシステムの管理を行う場合、ログローテやバックアップなど、定期的に自動実行したいジョブが数多くあり、その中でもバックアップ等の処理は、システムへの負荷が大きいため、ユーザのアクセスの少ない、深夜や早朝に行われるのが一般的です。
cronはcrondというデーモンによって管理することができます。
cronの設定等はcrontabコマンドを使用しますが、詳細はデーモンなども含めて後程記述したいと思います。
...cron?ジョブを自動実行?何ぞや? と思ったそこのあなた
私自身も、書籍やUdemy等で学習していた時期は、cronは言葉でしか理解していませんでいたし、コマンドに至っても叩いたことはあるけど、使い方丸暗記、オプションの意味も丸暗記で、全く使い物になりませんでした。
では、例題で考えてみましょう。
Aさんは会社で上司から、
毎月1日にQiita部署の全員分のフォルダを、社員名でQiitaフォルダ配下に作成してくれ、頼んだよ
と言われたとします。(正直こんなことは自分でやれと思いますが、、、)
この部署が2,3人だったら「新規作成で名前を設定する」で全然問題ないと思いますが、規模が大きくなっていき100人、200人となると骨が折れます。
そこでAさんは、このタスクのためにcron君を契約社員として採用しました!!
このcron君は、根っからの真面目で、言われたことはいつ何時でもその仕事を遂行します。
毎月1日になると、莫大なフォルダを作り上げるのです!!
しかし、手作業で行うとなると、ミスも出てきますし、その日が出勤ではない場合、その仕事は行われないことになります。
どんなに優秀な人材でもヒューマンエラーは起きないとは限りません!
そんな時は定時処理はLinuxのcronに任せよう!!
ここで登場するのが、cron
です。cron
に登録しておけば、人件費もかからず、かつ正確に超高速にタスクをこなしてくれます。
今回上司に言われた仕事は以下の通りです
- 毎月1日にフォルダを作成
- フォルダ名は社員名で作成
- 作成するフォルダは、Qiitaフォルダの配下に
上記のタスクをcronとシェルに処理を分担します。
注意
cronは定時処理はできますが、複雑な処理を記述するのには適していません。
シェルなどに複雑な処理を記述し、そのシェルをcronで呼び出して定時処理を実現します。
システム構築の注意点
システムによっては、常駐プログラムが多く存在してしまうケースがありますが、負担が大きくなり、パフォーマンスが低下したり、常駐プログラムが急停止して多大な経済的損失が発生したりすることがあります。
常駐プログラムをなるべく少なくし、サーバの負担を軽減して、定時処理に代用できるのであれば、cronに任せたほうが良きかなと思います。
「毎月1日に...」はcron
に、「フォルダ作成...」はシェルに任せます。
以下は例になるので、細かい処理や説明は省きます。
0 0 1 * * /qiita/make_dir.sh
#!/bin/bash
for name in 社員名リスト
do
mkdir -p /qiita/$name
done
-
cron
は、毎月1日の0:00にフォルダ作成のシェルを実行 -
シェルは、qiitaフォルダ配下に社員名のフォルダを人数分作成
これで、crondデーモンが起動しておけば、今後は誰も何もせずとも自動的に作成されます!!
cronとは
ここまで読んでいただければ、ある程度cronで何がしたいか、cronはなにをしているのかがぼんやり理解できたと思います。
cronとは、ある決まった時間に、決まった処理を行いたいときに使用する。
この程度の理解で、最初は問題ないかと...
もっと詳しく言うと、cronは各ユーザ1ファイル持っており、cronの実体は/var/spool/cron
配下にあり、cronを編集するときは crontab -e
コマンドを使ったり、anacron
も名前は似ているけどちょっと違う動きをしたり、、、
詳しいことは次回以降まとめていきま~す