スケジューリング入門とLinux Crontab構文
「株式情報を自動取得する」Pythonクローラーや「自動で明細書を送信する」Node.jsプログラムを作成した後、必ず直面する問題があります:毎日手動で実行するわけにはいきませんよね?
ここで必要になるのが「自動スケジューリング(Cronjob / Scheduled Tasks)」です。
スケジュールタスク(Cronjob)とは?
スケジュールタスクの概念は非常にシンプルで、スマートフォンの「アラーム」のようなものです。毎朝8時、毎時ちょうど、または毎週月曜日の午後3時など、コンピュータに「時間になったら、このコードを実行して」と指示できます。
ソフトウェアエンジニアリングの世界で、最も古典的かつ広く使われているスケジューリングツールが、Linuxオペレーティングシステムに組み込まれたcronデーモン(Daemon)です。そして、cronタスクを設定するための構文とファイルをCrontab(Cron Table)と呼びます。
Crontabの魔法の5つ星
他の人のスケジュール設定を見たことがあれば、次のような謎のコードを見たことがあるでしょう:
* * * * * /usr/bin/python3 /home/user/my_script.py
この一見ランダムに見える「5つ星」が、Crontabで時間を定義する核心です。左から右の5つのフィールドはそれぞれ:
- 分(Minute): 0~59
- 時(Hour): 0~23
- 日(Day of month): 1~31
- 月(Month): 1~12
- 曜日(Day of week): 0~7(0と7は日曜日を表す)
よく使われる時間設定例
[!TIP] 覚えられなくても大丈夫!業界のエンジニアはCrontabを書く際、通常crontab.guruというサイトを開きます。5つ星を人間が理解できる言葉に自動翻訳してくれるので、非常に便利です!
以下は最もよく使われる実践例です:
1. 毎分実行
* * * * *
(サーバーがダウンしていないことを確認するPingスクリプトに最適)
2. 毎時ちょうどに実行
0 * * * *
3. 毎朝8時30分に実行
30 8 * * *
(Lineグループに「おはようメッセージ」や「今日の天気予報」を送信するのに適しています)
4. 毎週月曜日の午前9時に実行
0 9 * * 1
5. 5分ごとに実行(スラッシュで頻度を表現)
*/5 * * * *
MacまたはLinuxで最初のCrontabを実装する
MacまたはLinuxシステム(ラズベリーパイを含む)を使用している場合、システムには既にcronが組み込まれており、何もインストールする必要はありません。
ステップ1:Crontabエディタを開く
ターミナルを開き、次のコマンドを入力してスケジュール表を編集します:
crontab -e
初めて実行する場合、システムは使用するエディタ(NanoやVimなど)を尋ねるかもしれません。初心者はNanoを選ぶのが直感的でおすすめです。
ステップ2:スケジュールとスクリプトのパスを記述
~/Documents/auto_email.pyにPythonスクリプトがあり、毎晩10時に実行したい場合:
エディタに次の行を追加します:
0 22 * * * /usr/bin/python3 ~/Documents/auto_email.py >> ~/Documents/cron_log.txt 2>&1
詳細解説:
0 22 * * *:毎日22:00を表します。/usr/bin/python3:Crontabでは絶対パスを使用することを強く推奨!Crontabの実行環境はターミナルと異なり、pythonの場所が見つからない可能性があります。~/Documents/auto_email.py:スクリプトの場所。>> ~/Documents/cron_log.txt 2>&1:これは非常に便利な上級テクニックです!Crontabはデフォルトでバックグラウンドで実行されるため、プログラムがエラーを出しても気づきません。このコマンドは、プログラムのprint()出力とすべてのエラーメッセージをcron_log.txtファイルに記録し、デバッグを容易にします。
ステップ3:保存して終了
ファイルを保存すると、ターミナルに次のメッセージが表示されます:
crontab: installing new crontab
おめでとう!自動化スクリプトが起動しました!コンピュータの電源を切らない限り、システムは毎晩10時に正確にメールを送信します!
なぜ他のツールも学ぶ必要があるのか?
Crontabは非常に強力ですが、致命的な欠点があります:コンピュータを24時間稼働させておく必要があることです。
ノートパソコンにスケジュールを設定した場合、画面を閉じるとスケジュールは実行されません。小さなスクリプトのために月に数百円かかるクラウドサーバー(VPS)を借りてCrontabを実行するのは、コストがかかりすぎます。
したがって、次の章では、完全無料のクラウドスケジューリングツールを使用してスクリプトをクラウドにアップロードする方法を教えます。これにより、コンピュータの電源を入れなくても、24時間稼働させて収益を生み出し、作業を続けさせることができます!