次の方法で共有


Web ジョブでバックグラウンド タスクを実行する

この記事では、 Azure portal を使用して Web ジョブをデプロイして実行可能ファイルまたはスクリプトをアップロードする方法について説明します。 WebJobs は、Web アプリと同じインスタンスでプログラムまたはスクリプトを実行できる Azure App Service の機能です。 すべての App Service プランでは、WebJobs をサポートしています。 WebJobs を使用するための追加のコストはありません。

概要

Web ジョブは、Web アプリと同じインスタンスでプログラムおよびスクリプトを実行できるようにする Azure App Service の機能です。 すべての App Service プランでは、WebJobs をサポートしています。 WebJobs を使用するための追加のコストはありません。

Azure App Service の代わりに Visual Studio を使用して Web ジョブを開発およびデプロイする場合は、 Visual Studio を使用した Web ジョブの開発とデプロイに関するページを参照してください。

Azure Functions は、プログラムとスクリプトを実行する別の方法を提供します。 Web ジョブと Functions の比較については、「 Azure で適切な統合サービスと自動化サービスを選択する」を参照してください。

Web ジョブの種類

スクリプトまたはプログラムでサポートされるファイルの種類

次のファイルの種類がサポートされます。

  • Windows cmd の使用: .cmd.bat.exe
  • PowerShell の使用: .ps1
  • Bash の使用: .sh
  • Node.jsの使用: .js
  • Java の使用: .jar

これらのファイルの種類を実行するために必要なランタイムは、Web アプリ インスタンスに既にインストールされています。

継続的 Web ジョブとトリガーされる Web ジョブ

次の表で、継続的 Web ジョブとトリガーされる Web ジョブの違いを説明します。

継続的 トリガー
Web ジョブが作成されるとすぐに開始します。 ジョブが終了しないようにするため、プログラムまたはスクリプトは、その動作を無限ループ内で実行します。 ジョブが終了した場合でも、再開することができます。 通常、WebJobs SDK と共に使用されます。 手動またはスケジュールに従ってトリガーされたときにのみ開始します。
Web アプリが実行されているすべてのインスタンスで実行されます。 必要に応じて、Web ジョブを 1 つのインスタンスに制限できます。 Azure が負荷分散用に選択した 1 つのインスタンス上で実行されます。
リモート デバッグをサポートします。 リモート デバッグをサポートしません。
コードは \site\wwwroot\app_data\Jobs\Continuous に配置されます。 コードは \site\wwwroot\app_data\Jobs\Triggered に配置されます。

Web アプリは非アクティブな状態が 20 分続くとタイムアウトになり、実際の Web アプリに対する要求だけがタイマーをリセットできます。 Azure portal でアプリの構成を表示したり、高度なツール サイトに要求を行ったりしても、タイマーはリセットされません。 ジョブをホストしている Web アプリを継続的に実行させるか、またはスケジュールに従って実行させるか、あるいはイベント ドリブン トリガーを使用するように設定する場合は、Web アプリの Azure の [構成]ウィンドウで [Always On] 設定を有効にします。 [Always On] 設定は、これらの種類の WebJobs が確実に実行されるようにするのに役立ちます。 この機能は、Basic、Standard、および Premium の価格レベルでのみ利用できます。

継続的 Web ジョブを作成する

重要

アプリケーションでソース管理が構成されている場合は、ソース管理の統合の一環として Webjobs をデプロイする必要があります。 アプリケーションのソース管理を構成した後、WebJobs を Azure portal から追加することはできません。

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウの [設定] で [ Web ジョブ] を選択し、[ 追加] を選択します。

    ポータルで App Service アプリに Web ジョブを追加する方法を示すスクリーンショット。

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    App Service アプリ用のマルチインスタンスの継続的 Web ジョブを構成する方法を示すスクリーンショット。

    設定 値の例 説明
    名前 myContinuousWebJob ユニークな Web ジョブ名 文字または数字で始まる必要があり、 "-" および "_"以外の特殊文字を含めてはなりません。
    ファイルのアップロード ConsoleApp.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 継続的 Web ジョブの種類については、この記事の中で既に説明しています。
    スケール マルチインスタンス 継続的 Web ジョブでのみ使用できます。 プログラムまたはスクリプトがすべてのインスタンスで実行されるか、1 つのインスタンスだけで実行されるかどうかを決定します。 複数のインスタンスで実行するオプションは、Free または Shared 価格レベルには適用されません。
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. 継続的 Web ジョブを停止または再開するには、一覧でその Web ジョブを右クリックし、[停止] または [実行] ボタンを選択してから、選択内容を確認します。

    Azure portal で継続的な Web ジョブを停止する方法を示すスクリーンショット。

手動でトリガーされる Web ジョブを作成する

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウの [設定] で [ Web ジョブ] を選択し、[ 追加] を選択します。

    ポータルで App Service アプリに WebJob を追加する方法を示すスクリーンショット(手動でトリガーされた WebJob)。

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    App Service アプリ用の手動でトリガーされる Web ジョブを構成する方法を示すスクリーンショット。

    設定 値の例 説明
    名前 myTriggeredWebJob ユニークな Web ジョブ名 文字または数字で始まる必要があり、 "-" および "_"以外の特殊文字を含めてはなりません。
    ファイルのアップロード ConsoleApp1.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 トリガー Web ジョブの種類については、この記事で前述のとおりです。
    トリガー マニュアル
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. 手動でトリガーされた Web ジョブを実行するには、一覧でその Web ジョブを右クリックし、[実行] ボタンを選択してから、選択内容を確認します。

    Azure portal で手動でトリガーされた Web ジョブを実行する方法を示すスクリーンショット。

スケジュールされた Web ジョブを作成する

スケジュールされた Web ジョブもトリガーされます。 指定するスケジュールでトリガーが自動的に実行されるように、スケジュール設定できます。

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウの [設定] で [ Web ジョブ] を選択し、[ 追加] を選択します。

    ポータル (スケジュールされた Web ジョブ) で App Service アプリに Web ジョブを追加する方法を示すスクリーンショット。

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    App Service アプリでスケジュールされた Web ジョブを構成する方法を示すスクリーンショット。

    設定 値の例 説明
    名前 myScheduledWebJob ユニークな Web ジョブ名 文字または数字で始まる必要があり、 "-" および "_"以外の特殊文字を含めてはなりません。
    ファイルのアップロード ConsoleApp.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 トリガー Web ジョブの種類については、この記事の中で既に説明しています。
    トリガー スケジュール スケジュールを確実に動作させるために、Always On 機能を有効にします。 Always On 機能は、Basic、Standard、および Premium の価格レベルでのみ利用できます。
    CRON 式 0 0/20 * * * * CRON 式については、次のセクションで説明します。
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. スケジュールされた Web ジョブは、CRON 式によって定義されたスケジュールに従って実行されます。 任意のタイミングでこれを手動で実行するには、一覧でその Web ジョブを右クリックし、[実行] ボタンを選択してから、選択内容を確認します。

    Azure portal で手動でスケジュールされた Web ジョブを実行する方法を示すスクリーンショット。

NCRONTAB 式

NCRONTAB 式は CRON 式に似ていますが、時間精度 (秒単位) の先頭に追加の 6 番目のフィールドが含まれています。 次の例に示すように、ポータルで NCRONTAB 式を入力するか、Web ジョブ.zipファイルのルートにsettings.job ファイルを含めることができます。

{
    "schedule": "0 */15 * * * *"
}

詳細については、「Scheduling a triggered WebJob (トリガーされる Web ジョブのスケジュール設定)」を参照してください。

CRON 式の実行に使用される既定のタイム ゾーンは、協定世界時 (UTC) です。 別のタイム ゾーンに基づいて CRON 式を実行するには、ご使用の関数アプリ用に WEBSITE_TIME_ZONE という名前のアプリ設定を作成します。 詳細については、「NCRONTAB タイムゾーン」を参照してください。

Web ジョブの管理

Azure portal を使用して、サイトで実行されている個々の Web ジョブの実行状態を管理できます。 [設定]>[Web ジョブ] にアクセスし、Web ジョブを選択すると、Web ジョブを開始および停止することができます。 また、Web ジョブを実行する Webhook のパスワードを表示および変更することもできます。

という名前のWEBJOBS_STOPPED1 の値で構成して、サイトで実行されているすべての Web ジョブを停止することもできます。 この方法を使用すると、ステージングおよび運用スロットの両方で競合する Web ジョブが実行されないようにすることができます。 同様に、1 の値を WEBJOBS_DISABLE_SCHEDULE 設定に使用して、サイトまたはステージング スロットでトリガーされた Web ジョブを無効にすることもできます。 スロットの場合は、設定自体がスワップされないように、 [デプロイ スロットの設定] オプションを必ず有効にしてください。

ジョブ履歴の表示

  1. 表示する Web ジョブで、[ログ] を選択します。

    Web ジョブのログにアクセスする方法を示すスクリーンショット。

  2. [WebJob Details](Web ジョブの詳細) ページで、詳細を確認する実行時間を選択します。

    Web ジョブの実行を選択して詳細なログを表示する方法を示すスクリーンショット。

  3. [Web ジョブ実行の詳細] ページでは、[ダウンロード] を選択してログのテキスト ファイルを取得するか、ページの上部にある [WebJobs] 階層リンクを選択して別の Web ジョブのログを表示できます。

ウェブジョブの状態

一般的な Web ジョブの状態の一覧を次に示します。

  • 初期化中: アプリが開始され、Web ジョブの初期化プロセスが実行されます。
  • 開始中: Webジョブを開始しています。
  • 実行中: Web ジョブが実行されています。
  • PendingRestart: 何らかの理由で開始されてから 2 分以内に継続的な Web ジョブが終了し、App Service は Web ジョブを再起動するまで 60 秒待機します。 2 分後に継続的 Web ジョブが終了した場合、App Service では 60 秒間待機せず、Web ジョブを直ちに再起動します。
  • 停止済み: Web ジョブは (通常は Azure portal から) 停止され、現在は実行されておらず、継続的またはスケジュールされた Web ジョブであっても、手動でもう一度開始するまで実行されません。
  • 中止: これは、実行時間の長い Web ジョブがタイムアウト マーカーに達した場合など、さまざまな理由で発生する可能性があります。

次のステップ

チュートリアル: WebJobs を使用してバックグラウンド タスクを実行する