こんにちは、おはじきです。
みなさん、インフラエンジニアにおける運用、保守の作業と言ったらどのような作業が思い浮かぶでしょうか?
サーバーやネットワークの監視、障害対応、データのバックアップなど様々な業務がありますね。
運用、保守の業務は開発や設計の業務とは違い、日々の業務内容は大体決まっていて、定められた手順書に従って業務を進めて行くことが多いです。
そんなルーチンワークを効率よく進めるためにはジョブスケジューリングについて理解する必要があるでしょう。
ジョブスケジューリングとは、定期的に実行する作業を自動的に実行されるように設定する事です。
Linuxが標準で備えてる機能の範囲ではcronとatコマンドがジョブスケジューリングを助けてくれますので、
今回はこの2つのコマンドを実践を交えてご紹介します。
定期的に実行したいジョブを設定するcrontabコマンドと、
ジョブのスケジュールを管理するデーモンであるcrondをまとめてcronと呼びます。
因みにデーモンとはメモリ上で待機している常駐プログラムの事です。
実際にcrontabコマンドを使ってジョブを設定していきましょう。
まずはコマンドのオプションについて説明します。
-e | cronファイルを作成、編集する。 |
-l | 内容を表示 |
-r | 設定されたジョブを全て削除 |
-i | 削除時に確認をする |
crontab -e と入力するとエディタが立ち上がります。
そのエディタに実行したいジョブの内容と時間を入力する事で後はcrondが自動で実行してくれます。
こちらが実際に編集されたcronファイルです。
まずは書式から説明しますね。
分 時 日 月 曜日 実行したいコマンド
の順に書いていきます。
分と0~59
時は0~23
日は1~31
月は1~12
曜日は0~7(0と7は日曜日)
の数字を使って編集します。
上の画像では2分おきに「ohajiki by cron」とohajiki.logに追記していくというジョブを設定しています。
*はその項目全てに当てはまる事を意味します。
*/〇と書くことで何分おき、何時間おき、何日おきなどの設定も可能です。
定期的にファイルのバックアップを取ったり、監視結果をメールで送ったり、
シェルスクリプトと組み合わせることによって非常に幅広く応用の効くプログラムですので是非使いこなせるようにしておきたいですね。
cronは日時を指定して定期的に実行するジョブを指定するのに対しこちらのatコマンドは1回だけ実行したいジョブを設定する事によって自動で実行してくれます。
このコマンドは対話方式で実行します。
日時を指定するとその時間に何をするか聞かれるので設定します。
とりあえず実際にやってみましょうか。
atコマンドで実行する時間を指定します。様々なフォーマットがあるのですが、2020年の9月25日13時7分に実行したい時はこのような指定の仕方をします。
そうするとat>というプロンプトがでてきますのでここから実行したいプログラムを入力します。
今回は「ohajiki by at」という文字列をohajiki.logファイルに追記してくださいという内容を設定しました。
この入力画面を終了するにはCtrl+Dを押します。
そうすると<EOT>と出力された後この時間にジョブが実行されますよという表示が出てスケジュールが完了します。
at -l でスケジューリングされているジョブの一覧を表示する事ができます。
先ほども述べましたがatコマンドの時間の指定フォーマットは様々で、
例えば次に来る13:00にコマンドを実行したければ本来なら上の画像の様に年月日を指定しなくても普通に13:00もしくは1pmと打てばよかったりします。
10分後に実行したいという書き方はnow + 10min、
2日後の13時なら13:00 today + 2 day
3週間後の今この時間を指定したければnow + 3weeks
などcronとは全く違う書き方をするのでもし両方使う機会があれば注意して使わなくてはいけませんね。
Lpic102の試験対策として覚えておかなくてはいけない内容としてcronとatコマンドのアクセス制御用ファイルというものがあります。
ユーザー1人1人に利用を許可するか否かをファイルに記述することで設定します
cronを利用するユーザーを許可する場合は/etc/cron.allow
拒否する場合は/etc/cron.denyに記述します。
これらのファイルの設定ルールとしまして、
/etc/cron.allowが存在すればそこに記述されたユーザーのみがcronを利用できます。
その時 /etc/cron.denyがあろうがなかろうが無視されます。
/etc/cron.allowが存在しなければ/etc/cron.denyを参照し、記述されているユーザー以外の全てのユーザーがcronを利用できます。
デフォルトでは空の/etc/cron.denyのみが存在しているので全てのユーザーがcronを利用できます。
atも似たようなもので
/etc/at.allowと /etc/at.denyがありこれらを使いアクセス制御を行うことができます。
ファイルの優先順位などはcronと同じですが違う点として 、
もしallowもdenyも存在していない場合についてですが、
cronは全てのユーザーが利用できます 。
atコマンドはrootユーザーのみが利用できます。
cronとatのアクセス制御についてはテストに出る可能性がありますので受けようと考えている方は覚えておきましょう。
今回はcronとatを利用したジョブスケジューリングについて解説しました。
これらをうまく利用できればより効率的に仕事ができるようになるんだろうなぁと感じるような内容だったのではないでしょうか。
是非シェルスクリプトとジョブスケジューリングをマスターして円滑な運用業務を実践しましょう。
それでは。