素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

投稿日:

【自動化への第一歩】Cronのスケジューリング設定の書き方と使い方【crontab】

YouTubeも見てね♪

【最新機種】GoPro hero11 Black

created by Rinker
GoPro(ゴープロ)
¥62,000 (2024/04/03 21:42:08時点 Amazon調べ-詳細)

最新機種でVlogの思い出を撮影しよう!

ペヤング ソースやきそば 120g×18個

created by Rinker
ペヤング
¥2,600 (2024/04/03 21:42:16時点 Amazon調べ-詳細)

とりあえず保存食として買っておけば間違いなし!

レッドブル エナジードリンク 250ml×24本

created by Rinker
Red Bull(レッドブル)
¥4,000 (2024/04/03 21:42:12時点 Amazon調べ-詳細)

翼を授けよう!

モンスターエナジー 355ml×24本 [エナジードリンク]

created by Rinker
モンスター
¥4,748 (2024/04/03 21:33:15時点 Amazon調べ-詳細)

脳を活性化させるにはこれ!

ドラゴンクエスト メタリックモンスターズギャラリー メタルキング

created by Rinker
スクウェア・エニックス(SQUARE ENIX)
¥3,250 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

みんな大好き経験値の塊をデスクに常備しておこう!

BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール

created by Rinker
BANDAI SPIRITS(バンダイ スピリッツ)
¥7,500 (2024/04/03 21:42:14時点 Amazon調べ-詳細)

もう一人の僕を呼び覚ませ!!

サンディスク microSD 128GB

スマホからSwitchまで使える大容量MicroSDカード!

Cronってよく聞くけどなんなんだろう

What’s?

皆さんはCron(クーロン)をご存知でしょうか?

サーバーサイド開発やインフラ管理をしている方はご存知だと思います。
これは、UnixやLinuxで多く使われるスケジューラーを設定/実行するためのプログラムの事です。

コマンドラインから、xx時になったらyyを実行してね、という命令を簡単に設定する事が出来るので、シェルスクリプトなどを定期実行する際によく多用されています。

Cronはスケジューリングの設定に専念

Cronを使って処理をスケジューリングすると、命令に従ってしっかりと処理を実行してくれます。
ただ、命令した以外の事はもちろん行わないので、細かい動きはシェルスクリプト内に記述するようにしてあくまで実行タイミングのスケジューリングのみをCronで行うようにしましょう。

Cronのスケジューリングで実行処理を設定するのは好ましくありません。

設定の癖が強いんじゃ!!

ただ、このCronですが実行タイミングを設定する際の設定がかなり癖が強いため、慣れていないとパッと設定するのがちょっと難しいです。
設定方法は分 時 日 月 曜日 実行コマンドの形式で指定する必要があります。

また、それぞれの項目に指定出来る値は以下のようになっています。

項目 入力値
0~59
0~23
1~31
1~12
曜日 0~7
※0,7=日曜、1=月曜、2=火曜…

また、それぞれの項目には以下のような値も設定をする事が可能です。

記号 説明 設定例
範囲指定 分フィールドに5-10とした場合は、5~10分の毎分にCronが実行される
* 全範囲 時フィールドに*とした場合は、毎時にCronが実行される
, 複数指定 分フィールドに1,3,5-10とした場合は、1,3,5分と10分までの毎分にCronが実行される
/ 間隔値指定 分フィールドに5-10/2とした場合は、5~10分の間を2分間隔で実行し、*/5だと5分毎にCronが実行される

これらを多種多様に組み合わせてCronを設定する事になるので、慣れるまでは一瞬でスケジューリングを把握するのが難しいですね。。。

では、それを踏まえて実際にCronを使ってみましょう。

手順

準備

今回は以下のような、実行日時をlogファイルに追記していくとてもシンプルなシェルスクリプトを用意し、そちらをCronに設定して動かしてみようと思います。

スケジューリングを登録

今回は例として、1分毎に上位のシェルを実行するCronを設定してみましょう。
以下のコマンドでCronの編集エディタを開きましょう。

すると、エディターが設定しているエディタが表示されるので、以下を追加して保存してください。

保存をすると以下のようなログが表示され、Cronの設定が完了します。

ちなみに、すでにCronの設定がある場合は1行目が表示されません。

スケジューリングの確認

現在登録しているCronを確認するには以下のコマンドで確認出来ます。

crontab -eで登録した情報がリスト表示されます。

実行されないぞ。。。

1分待ってもログファイルが生成されません。

デフォルトでは、Cron実行時のエラーログ/var/mail/{ユーザー名}に追記されていきます。
今回の原因もそちらに記載されているはずなので、以下のコマンドで確認してみましょう。

すると、以下のようなエラーが出力されていました。

どうやら、シェルの実行権限が無いようです。
現在、このシェルスクリプトのファイルは644となっています。

コマンドからはsh /Users/{ユーザー名}/tmp/work/cron/sample.shで正常に実行出来たとしても、Cronから実行する場合はしっかりとファイル権限を変えないと動かないようですね。

ですので、以下のコマンドで実行権限を追加しましょう。

確認

これで毎分ログファイルに実行日付が追記されていくようになったと思います。

スケジューリングの削除

Cronで登録したスケジューリングは意図して消さない限り残り続けます。
ですので、そのまま残していると次の年に去年設定していたCronが動いて問題に!という事も十分ありえます。
Cronの削除はcrontab -eコマンドから削除する事が可能です。

また、一括して削除したい場合はcrontab -rでも可能です。

ただ、確認無しで全て消えてしまうので、使うときは気をつけましょう。

終わりに

以上のように、Cronを利用すればコマンドから簡単に定期実行処理を設定する事が可能です。

今まで手作業で定期実行していた部分を自動化する事が可能になるので、使いようによっては作業効率が格段にアップします。

また、スケジューリングの仕方もとても柔軟性が高いので、是非使いこなしてみてください。

CATEGORIES & TAGS

IT