3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cronジョブの使い方

Last updated at Posted at 2023-04-26

今回初めてCronジョブに挑戦しました。備忘録です。

Cronジョブとは

Cron(クーロン)ジョブとは、設定された時間になるとコンピュータが自動でスクリプトを走らせ仕事をしてくれるものです。Windowsのタクスケジューラーに当たります。例として、定期的に行うデータのバックアップ、データのアップロード/ダウンロードなどを、利用が少ない夜間のタイミングにスケジューリングしておくことができる。

ジョブをスケジュールする

Crontabでスケジューリング

ターミナルで次のコマンドを実行し、クーロンタブを開く。「-e」はedit(編集)の意。

crontab -e

クーロンタブには下記の要領で入力。

*     *     *     *     *  (コマンド/スクリプト)
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- 曜日を0から6で入力(日曜日(=0)から始まる)
|     |     |     +------- 月を1 から 12で入力
|     |     +--------- 日にちを1 から 31で入力
|     +----------- 時間を 0から23で入力
+------------- 分 を0 から 59で入力

  • クーロンタブが編集できない時は、aキー(append)またはiキー(insert)を押す。
  • 編集後は、Escキー、コロン(;)キー、wキー(Writeの意)、qキー(Quitの意)を押すとクーロンタブを抜けられる。

アスタリスク5つ及び実行したいコマンド/スクリプトだ。この5つのアスタリスク及びコマンド/スクリプトの間にはそれぞれに半角スペースを入れる。
アスタリスクは全てを表す。例えば、毎週日曜日、午前0時10分にジョブを走らせたい場合は、下記のようになる。

10 0 * * 0 (コマンド/スクリプト)

スケジューリングはもっと細かく設定できるので、必要に応じて調べればOK。

簡単なテストをしてみる

いきなりスクリプトを走らせる前に、echoでメッセージを表示させてみる。 下記は、23時55分に"Hello"と表示させるスクリプト。

55 23 * * * echo "Hello" 
  • クーロンタブを抜けると、ターミナルからアドミンなんとかのメッセージが出るので、「OK」で進める。
  • スクリプトを保存したら、ターミナルに "crontab: installing new crontab"(クーロンタブ:新しいクーロンタブをインストールしています)のメッセージが出ていることを確認。出ていない場合は、権限に問題がある。
    私はこちらの記事を参考に権限設定した。

ジョブ実行時刻である23時55分を過ぎたところで、ターミナルを起動すると、"You have mail"のメッセージが。メールを確認する。

mail

23時55分に実行されたメールを開くと、「Hello」のメッセージがプリントされている。

Python ファイルをクーロンジョブで実行する

上記では、クーロンジョブで実行するコマンドを直接入力したが、今度は、.pyファイルを実行する。 クーロンジョブでPythonコードを走らせるには、.pyファイルのトップに次の1行を追加する必要がある。これにより「このファイルはPythonで実行してね」と実行プログラムを指定する。
code.py
#!/usr/bin/env python

また、クーロンタブでジョブを設定する際に、Pythonのパスを渡す必要がある。
今回、私はpyenv環境を使ったため、pyenvコマンドにてPythonパスを確認する。

pyenv which python

ここで確認したPythonのパスをクーロンタブで使用する。

* * * * * (Pythonパス) (実行するスクリプトのパス)

下記は実行例

23 55 * * * /usr/bin/python3 /path/to/myscript.py

私は今回、.pyファイルの中で、ファイルをエクスポートするコマンドを記載しておいたのだが、このエクスポート先も絶対パスで記載する。そうしないと、HOMEディレクトリにファイルが出来てしまった。
また、.pyファイル内に、printを入れておけば、コードがどこまで進んだかを、先述したしたmailから確認できる。あるいは、更新時刻から、コードの実行状況を確認出来る。

最後に

今回初めてクーロンジョブを使った。頻繁にデータ収集、データ更新するデータベースの管理などがラクになりそうだ。次のプロジェクトでデータベースとともに使ってみたい。
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?