Cronでスクリプトをスケジューリングする

Bashスクリプト入門

Alex Scriven

Data Scientist

なぜスケジュールするのか?

 

スクリプトのスケジューリングは多くの場面で有用です。

  1. 定期タスク(毎日、毎週、1日複数回など)。
    • カレンダー通知もできますが、忘れるかもしれません。
  2. リソースの最適活用(深夜・早朝に実行)

cron によるスケジューリングは、現代のデータ基盤を扱ううえで不可欠です。

Bashスクリプト入門

cronとは?

 

Cronは1970年代からUNIX系システムにあります。人間はその頃から「自動化好き」でした。

名称はギリシャ語の時間を意味する語、chronos に由来します。

crontab というファイルに cronjob を列挙し、何をいつ実行するかを指定します。

Bashスクリプト入門

Crontab — cronjobのドライバー

 

現在設定されているスケジュール(cronjob)は次で確認できます。

crontab -l
crontab: no crontab for user

ではスケジュール(cronjob)を作りましょう。

Bashスクリプト入門

Crontabとcronjobの構成

Wikipediaの図は、crontab 内に cronjob をどう書くかを示しています。cronjob は1行に1つ、複数書けます。

crontabの構成

  • 時間単位ごとに5つのアスタリスクを設定します。
  • 既定の * は「毎〜」を意味します。
Bashスクリプト入門

Cronjobの例

cronjobの例を見ていきます。

5 1 * * * bash myscript.sh

  • 分は5(各時の5分)。時は1(午前1時)。残り3つは *(毎日・毎月)。
    • 全体: 「毎日 午前1:05に実行」。

 

15 14 * * 7 bash myscript.sh

  • 分は15(各時の15分)。時は14(午後2時)。次の2つは *(毎月の毎日)。最後は7(日曜日)。
    • 全体: 「毎週日曜の午後2:15に実行」。
Bashスクリプト入門

高度なcronjob構文

1日複数回や「X」間隔ごとに実行することも可能です。

  • 特定の間隔にはカンマを使います。例:
    • 15,30,45 * * * * は分が15,30,45のときに、2つ目のアスタリスクで指定した各時に実行します。ここでは毎時・毎日など。
  • 「毎X間隔」にはスラッシュを使います。例:
    • */15 * * * * は15分ごとに実行します。こちらも毎時・毎日など。
Bashスクリプト入門

最初のcronjob

毎朝1時30分に extract_data.sh を実行するようにスケジュールしてみましょう。手順は次のとおりです。

  1. ターミナルで crontab -e と入力し、cronjob一覧を編集します。
    • エディタ選択を求められる場合があります。nano は vi(vim) より習得が容易です。
  2. cronjobを作成します。
    • 30 1 * * * extract_data.sh
Bashスクリプト入門

最初のcronジョブ

3. 保存してエディタを終了します。

Macの nano なら、ctrl + o、enter、ctrl + x で終了します。

crontab: installing new crontab と表示されます。

4. crontab -l で登録を確認します。

30 1 * * * extract_data.sh

よくできました。

Bashスクリプト入門

Passons à la pratique !

Bashスクリプト入門

Preparing Video For Download...