9
8

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 3 years have passed since last update.

pythonでcronジョブの管理しよう

Last updated at Posted at 2019-11-12

Build Status pypi GitHub license 

cronpiとは

crontabの処理がもっと簡単に管理できないかと色々悩んだ結果、Pythonでパッケージを作ることにしました。本当は名前を「cronpy」にしたかったのですが、すでにほかの方が登録していたので「cronpi」にしました。
cronpiとはUNIX系のパソコン(linux/mac)で定期的に実行する処理をcrontabに登録するパッケージです。Python2系と3系で動きます。

crontabの処理を読みやすくしてくれます。

Installation

pip install cronpi

サンプル

sample.py
# パッケージのインポート
import cronpi

# 毎日午後5時半に実行する処理を登録
cronpi.run_every_day("/opt/backup.sh").on("5:30pm")

機能一覧

cronpiは以下の機能のもつ関数をもちます。

SN 関数名 説明
1. run_by_date 日付をYYYY-MM-DD HH:mmに指定して実行できる処理
2. run_every_day HH:mmに時間を指定する事で毎日できる処理
3. run_every_week 曜日名を指定して実行できる処理
4. run_every_month 日にちを指定して実行できる処理
5. run_every_year 月の名前と日を指定して実行できる処理
6. run_custom "crontab -e" に入力する1行の内容を指定して実行できる処理

上記の関数が二つの引数を受け付けます。
cronpi.XXXX(<command>, <isOverwrite=bool>?)

parameter type description
command string 定期的に実行するコマンド
isOverwrite bool falseの場合は、常に新しいジョブを追加します。デフォルトはFalse

第1引数のコマンドがすでにジョブに存在しかつ、第2引数がisOverwrite=Trueの場合は、新しいジョブではなく既存の内容を新しい内容に変えます。

使い方

① 一度のみ実行する処理

・日付を指定して実行する処理の登録

cronpi.run_by_date("/some/command").on("2020-10-20 5:30pm")

※ Cronの仕様上「年」の指定ができないため、2020年以降も毎年実行されます。
実行後1年以内に手動で削除する必要があります。

② 毎日実行する処理

・毎日実行する処理の登録

cronpi.run_every_day("/some/command").on("5:30pm")

③ 毎週実行する処理

・毎週特定の曜日に実行する処理の登録

cronpi.run_every_week("/some/command").on("sunday", time="17:30")

・複数曜日の指定も可能

cronpi.run_every_week("/some/command").on(["sat", "sun"], time="5:30PM")

④ 毎月実行する処理

・毎月実行する処理の登録

cronpi.run_every_month("/some/command").on(10, time="17:30")

・ 複数日の指定も可能

cronpi.run_every_month("/some/command").on([10,20], time="17:30")

⑤ 毎年実行する処理

・特定の月で実行する処理の登録

cronpi.run_every_year("/some/command").on("january", day=10, time="5:30am")

・複数の月の登録が可能

cronpi.run_every_year("/some/command").on(["jan", "oct"], day=10, time="5:30")

⑥ カスタム処理

・カスタム登録

cronpi.run_custom("* * * * * /some/command")

補足

「get_job_list」関数を使う事で現在のジョブの一覧をListとして取得する事ができます。

cronpi.get_job_list()
9
8
6

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
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?