本記事は、Pythonでタスクスケジュールを制御できるライブラリ「python-crontab」について説明します。

crontabは特定の時刻になった時に特定の処理やスクリプトを実行可能にする機能です。
「python-crontab」は、crontabをPythonで操作することを可能としたライブラリです。

今回はこのライブラリの活用方法の一つである「Python単独でタスクスケジュールを管理する」方法について説明します。

合わせて読みたい
似たようなことができるライブラリです。
【Python】Scheduleライブラリでタスクスケジュールを管理する

python-crontabライブラリの導入方法

ターミナルを開いて以下のコマンドを実行します。

pip install python-crontab

今回実装する内容

Pythonでジョブ作成してジョブ監視に入るまでの処理を実装します。

◆ジョブ作成の流れ
・新規ジョブを生成する
・ジョブにスケジュールを設定
・ジョブをタブファイルに保存

◆ジョブ監視と実行の流れ
・タブファイルから全ジョブを読み込む
・スケジュール実行の時間になるまで監視

ジョブ作成の流れから説明していきます。

python-crontabライブラリのジョブ作成の流れ

新規ジョブを生成してジョブにスケジュールを設定します。
ファイルに保存することでジョブを保持することも可能です。

新規ジョブを生成する

まずはジョブを生成してコマンドを設定します。ジョブの生成はnew()メソッドを使用します。
コマンドはターミナルのコマンドラインで実行できるコマンドです。今回は「helloworld.py」というファイルを実行してその結果をテキストファイルに出力します。

◆helloworld.pyの記述内容

print(“Hello World”)

コマンド設定の実行例は以下の通りです。

ジョブにスケジュールを設定

次にジョブにスケジュールを設定します。設定は生成したjobのメソッドsetall()を使用します。
パラメータの表記方法は基本的にOSの「crontab」と同じで、右から、「分 時 日 月 曜日」の指定となります。

毎日10時にスケジュールを実行する場合の設定例です。

job.setall(‘0 10 * * *’)

jobには「hour」、「minute」などのメソッドがあり細かく設定できますが、いろいろ覚えるとかえってややこしくなるので、まずは「setall()」の使い方だけ覚えておけば十分だと思います。

ジョブをタブファイルに保存

最後に設定したジョブの内容をファイルに保存します。保存にはwrite()メソッドを使用します。
ファイル名はなんでも大丈夫です。

ファイルは上書きされるので保存する場合は先にファイルを読み込んでおきましょう。

cron.write(‘output.tab’)

◆output.tabの出力内容

* * * * * python3 ./helloworld.py > ./test.txt

以上でジョブの作成は完了です。
ジョブを追加する場合は「cron.new()」で再度ジョブ生成してください。

python-crontabライブラリのジョブ監視と実行の流れ

ファイルから全ジョブを読み込んでジョブを監視状態に移行します。
時間になるとジョブが実行されます。

ファイルから全ジョブを読み込む

※「ジョブ作成の流れ」から実行する場合はこのステップを飛ばしてもOKです。

まずはファイルから全てのジョブを読み込みます。
ファイル名を指定してインスタンスを生成するとファイル内の全ジョブを読み込むことが可能です。

cron = CronTab(tabfile=file_name)

スケジュール実行の時間になるまで監視

ジョブを読み込んだらスケジュールの監視を開始します。
記述は以下の通りです。

これで監視状態に入ります。指定した時間になったらコマンドが自動的に実行されます。

python-crontabライブラリを使用するためのクラス

今までの処理を以下のクラスにまとめました。

このクラスの使い方

●Jobを生成する
1.インスタンスを生成します。
2.コマンド、スケジュール、ファイル名を指定してwrite_job()メソッドをコールします。
※ファイル名は任意です。スケジュールの記述方法はOSのcrontabと同じです。

●スケジュールを開始する
1.タスクスケジュールを記述したファイルを指定してread_jobs()をコールします。
2.monitor_start()をコールします。

これで監視状態となり、指定した時刻になるとコマンドが実行されます。

実行例

以上、python-crontabの使用方法とコードの作成例でした。
このライブラリはOSのcrontabの操作も可能なツールなので機会があればそちらの実装方法も紹介したいと思います。

◆関連記事
【Python】Scheduleライブラリでタスクスケジュールを管理する
PythonでSlackに天気を定期配信する〜crontabを使用したタスクスケジュール処理〜

Pythonでスケジュール管理する方法については以下の記事にまとめています。
Pythonでスケジュール管理する方法まとめ