AzureのAppServiceでWEBジョブを使って定期的なバッチ処理を登録してみた

目次

WEBジョブを使えば定期的な処理を実行できる

AzureのAppServiceで、Windowsのタスクスケジューラとか、Linuxのcrontabのようなことをしたい場合は、WEBジョブが使える。
WEBジョブを使えば、定期的にスケジューリングして実行した処理、例えば、ログ収集や、ファイル削除等の処理を、実行させることができる。

WEBジョブ登録手順

あらかじめ、実行するプログラムはAppServiceへデプロイしておく。今回は、PHPスクリプトである、myjob.phpを登録するとする。

ジョブのトリガーファイル作成

まずは、実行するプログラムのトリガーとなるrun.batを作成する。
内容は、例えば以下のような感じ。

@echo off
php %HOME%site\wwwroot\htdocs\myjob.php

Azureに登録するには、zip圧縮しないといけない。上記run.batをzipファイルにする。フォルダ等に含める必要はなく、run.batをそのまま圧縮すればOK。このとき、zipファイルの名前に特に決まりはなく、適当なものでいい。

管理ポータルでジョブを登録する

トリガーファイルを用意できたら、管理ポータルにて、ジョブの登録をする。

1.管理ポータルで目的のApp Serviceを選択し、「設定」 > 「Web ジョブ」 > 「追加」

2.以下項目を設定する。

名前
ジョブの名前。

ファイルをアップロード
さきほど準備したzipファイルを選択する。

種類
トリガーされた:今回設定したのはコチラ。「トリガーされた」っていう日本語がおかしいが、これに設定すると、マニュアルで起動したり、スケジュールに乗せて起動したりできる。
継続:Windowsのサービスとか、Linuxのデーモンのように、常駐処理のようなことをしたい場合に設定。登録したら、処理が開始されるらしい(試してない)。スケールを設定して、シングルインスタンスで実行するか、マルチインスタンスで実行するか選べるみたい。

種類にトリガーされたを選択した場合
トリガー:予定か手動を選べる。今回は予定。
CRON 式:cron方式で時間を設定する。この設定方法は次の項目参照。(以前のAzureではcron式もjsonファイルにして、トリガーファイルと一緒に圧縮して送信していた。)

種類に継続を選択した場合
スケール:スケールを設定して、シングルインスタンスで実行するか、マルチインスタンスで実行するか選べるみたい。

3.すべて入力したら「OK」を押して登録する。
全部入力したら「OK」を押して登録。これでジョブの登録はOK。登録されたジョブを選択して「実行」押すと、手動で動かしたりもできる。

CRON式の書き方。

CRON式は、Linuxと同様に書けるが、ちょっと違う点があるので、注意する。

  • 最小単位は秒
    分と間違えて設定しないように!
{秒} {分} {時} {日} {月} {曜日}
  • UTCなので注意。
    設定した時間は、UTCとして認識されるので注意。例えば、日本時間(JST)の深夜の2時(26時)に実行する処理を登録したい場合は、JSTはUTC+9なので、以下のように、17時を設定する。
# 日本時間深夜2時に処理を実行
0 0 17 * * *

AppServiceの常時接続をオンにしておくのを忘れないように!

定期的に実行したい処理の場合、AppServiceの常時接続をオンにしておかないと、スケジュール通りに処理が実行されなくなってしまう。
アプリケーションタブの、常時接続の項目をオンに設定しておこう。(ただし、その分リソースを消費して、お金がかかるので注意。)

参考

あわせて読みたい
Run background tasks with WebJobs - Azure App Service Learn how to use WebJobs to run background tasks in Azure App Service. Choose from various script formats and run them with CRON expressions.
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

メインはWeb系エンジニアです。

コメント

コメントする

目次