こんにちは、えびかずきです。
今回は定期的に自動でプログラムを実行する方法として、crontabの使い方を説明していきます。
こんな人におすすめ:
時間になったら勝手にプログラムを実行してくれるようにしたい。
開発環境
MacOS:Catalina10.15.7
定期的に自動でスクリプトを実行する方法
今回は例として、itunesの曲目ランキングをRSSで毎日決まった時間に取得するということにチャレンジしていきます。
1.シェルスクリプトを作る
まずはプログラムの本体となるシェルスクリプトを作っていきます。
プログラムを保存したいディレクトリに移動して「itunes-rank.sh」というファイルを新規で作成しましょう。
$ cd ~
$ touch itunes-rank.sh
$ chmod a+x itunes-rank.sh
chmod~はファイルの実行権限を付与しています。
続いてシェルスクリプトの中身を編集していきます。
お好きなエディタで下のように編集します。
#!/bin/bash dirname="/Users/yourname/itunes-rank"
mkdir -p $dirname
filename="${dirname}/hourly-topsong-$(date '+%Y%m%d%H%M').xml"
echo "save to $filename"
curl -s -H "User-Agent: CrawlBot; yourmail@***" -o $filename https://itunes.apple.com/jp/rss/topsongs/limit=10/xml
~
プログラムの中身はかなり単純で、「curl」コマンドでitunesのトップソング上位10曲の情報をxml形式で取得して、ローカルにファイルを保存するという内容です。
crontabの設定
さていよいよ本題のcrontabの設定です。
crntabは繰り返し自動で実行するプログラムの時間を指定できるコマンドです。
下のコマンドでcrontabの設定ファイルを編集できます。
$ crontab -e
crontabを初めて実行すると、
crontab: no crontab for yourname – using an empty one
crontab: installing new crontab
という表示がでます。
crontabのファイルがないので、新しく作りますよーという事です。
上のコマンドを実行するとcrontabの設定ファイルが開きます。
たぶんviエディタで開くと思うので、「i」キーでインサートモードにして、
下の一行を追加しましょう。
0 0 * * * ~/itunes-rank.sh
追加できたら「esc」キーでインサートモードを終了し、「:wq」を入力してviから抜けましょう。
下のポップアップが出たら「OK」をクリックします。
設定の意味
さてcrontabの設定の仕方ですが、『分 時 日 月 曜日』の順に日時を設定できるようになっています。
したがって上のコマンドでは、毎日0時0分に、「~/itunes-rank.sh」のシェルスクリプトを実行せよという意味になります。
もちろんシェルスクリプトでなくても、何らかコマンドを渡せばそれを実行してくれます。
各日時対象の指定の仕方は下表の通りです。
対象 | 範囲 |
---|---|
分 | 0〜59 |
時 | 0〜23 |
日 | 1〜31 |
月 | 1〜12 または jan〜dec |
曜日 | 0〜7 または sun〜sat |
「crontab」の由来:
のcronの由来は諸説あるようですが、時間を意味するギリシャ語のクロノス(χρόνος)が語源のようです(crontab-wikipedia)
tabはたぶんテーブル。要するに時間設定のテーブルみたいな意味。
実行結果の確認
きちんと設定したプログラムが実行できているか確認してみましょう。
指定したディレクトリにきちんとxmlファイルが保存されています。
中身を確認してみると、以下のようになっていました。
大丈夫そうですね。
2020/12/9 0:00 実行結果
1.炎 – LiSA
2.虹 – 菅田 将暉
3.再会 (produced by Ayase) – LiSA & Uru
4.Step and a step – NiziU
5.夜に駆ける – YOASOBI
6.Dynamite – BTS
7.Nobody’s fault – 櫻坂46
8.三文小説 – King Gnu
9.silent – SEKAI NO OWARI
10.千両役者 – King Gnu
まとめ
今回はcrontabコマンドで繰り返し実行の時間指定のやり方を説明しました。
時間も作業内容も決まっているのであれば、どちらも自動化しない手はありません。
ITスキルを上げて、どんどん仕事の効率化を進めていきましょう。
参考・補足
Windowsの場合はタスクスケジューラというツールを使えば近いことが出来るみたいです。
コメントを書く