【Linux】cronの設定と検証

Linux

システムのcron設定

ユーザーのcronに対し、システム用のcrontabも用意されています。/etc/crontabファイルはというファイルに対し、そこから/etc/cron.*ディレクトリ配下に置かれたファイルを呼び出します。

システムのcrontabの書式について

ユーザーのcrontabについてはユーザー名が明らかでしたが、システムのcrontabにはユーザー名が明記されています。

書式

分 時 日 月 曜日 ユーザー名 コマンド

crontab関連のファイル、ディレクトリ について

ファイル/ディレクトリ 説明
/etc/crontab システムのcrontabファル。
/etc/cron.hourly/ 1時間に1度実行したいcronジョブを記載したファイルを格納するディレクトリ。
/etc/cron.daily/ 1日に1度実行したいcronジョブを記載したファイルを格納するディレクトリ。
/etc/cron.weely/ 1週間に1度実行したいcronジョブを記載したファイルを格納するディレクトリ。
/etc/cron.monthly/ 1ヶ月に1度実行したいcronジョブを記載したファイルを格納するディレクトリ。
/etc/cron.d/ cronジョブを記載したファイルを格納するディレクトリ。

検証

※以下の検証はCentOS8で検証しています。

検証するのに1日とか1週間はかけられないので、1時間あたりで実行する/etc/cron.houlyの検証をします。

まずは、/etc/cron.hourlyから。

run-partsについて

run-partsは、指定したディレクトリ配下にあるファイルを全て実行してくれるコマンドです。

run-partsの実行例

実行するファイルの中身を見ます。

実行されると、ファイル名を表示するスクリプトです。では、run-partsで実行します。

次に、/etc/cron.hourly/に適当なシェルを追加する。今回はtest.shというファイルを入れておきました。

あとはcronの指定した時間を待つだけ!と思って検証してもなかなかうまくいかなかったので、追記しておきます。結論は下記。

test.shに実行権がないと、実行できません。ファイルを配置した後、権限があるかはチェックする必要があります。

検証結果

時間通り出力されました。

なお、/etc/cron.hourlyで設定したものは、/etc/cron.d/配下にあるファイルに記述されていました。

/etc/cron.dを使用した設定例

上記の設定は、サイクルを/etc/crontabで指定しています。上記のようなサイクルとは別にジョブを指定したい場合に、cron.dディレクトリ配下を使用します。cron.d配下にはスクリプトファイルではなく、cronジョブを記述したファイルを格納します。

検証

/etc/cron.d/の配下に、次のようなファイルを作りました。

さて、これで1分待ちます。しかし、うまく実行できません。

/var/log/cronを見に行く。

cronに関するログは/var/log/cronにあります。

何やら怒られています。

解決策

調べてみると、パーミッションを変える必要があるようです。以下のように「600」に変えます。

再びログを観察。

OKっぽいログが出ました。/home/localhost/test.logを観にいきます。

無事に出力されているけど…なんか実行される順番が変です。

ログも見ます。

一応cronは実行されましたが、これではなんだか気持ち悪い。上から順番に実行してくれるわけではない?

解決策

以下のように書き直しました。実行する順番を

ログ、記録されたファイルは以下。

無事に「日付」の下に「freeコマンドの結果」が出力されるようになりました。

タイトルとURLをコピーしました