LoginSignup
11
11

More than 5 years have passed since last update.

Parse.comでcronのような定期タスクを実行する

Last updated at Posted at 2015-05-10

そもそもparse.comでcron / periodic taskは設定できるのか?

可能。

Cloud CodeのBackground Jobsを見るべし。

  • バックグラウンドジョブは15分で強制終了される
  • 秒間20タスクまで
  • 秒間20タスクの制限を超える状態でタスクが起動すると、直ちに終了される
  • cronのような定期タスクはダッシュボード設定可能

タスクの定義

Parse.Cloud.job()でジョブを定義できる。periodicHelloというタスクを定義して、hello関数を呼び出す。なお、 タスク終了時は必ずstatus.success()またはstatus.error()を呼び出す必要がある。

cloud/main.js
// hello()の定義
Parse.Cloud.define("hello", function(request, response) {
  response.success("Hello world!");
});

// ジョブの定義
Parse.Cloud.job("periodicHello", function(request, status) {
  Parse.Cloud.run('hello', {}, {
    success: function(result) {
      // タスクランナーにsuccess()を返す
      status.success('success!');
    },
    error: function(error) {
      // タスクランナーにerror()を返す
      status.error('error :-(');
    }
  });
});

定期タスクの設定

CoreタブのサイドメニューからJobsを選択してSchedule a jobを開く。

Kobito.9Itlj0.png

descriptionに適当な名前を入力し、Job Nameのプルダウンに定義済みのジョブが登録されているので選択する。Repeatで定期的に実行する時間を設定する。

Kobito.VRRIyL.png

設定するとジョブリストに追加される。Run Nowをクリックすると即座に実行される。

Kobito.jd4lzS.png

実行結果はJob StatusLogsで見ることが出来る。

Kobito.IDElee.png

トラブルシュート

タスク内からCloud Functionが呼び出せない

タスク内からCloud Functionを呼び出すことは出来ないみたい?

Cloud Function自体が非同期で動作するため、Cloud Functionの実行開始後にタスクが終了してしまいロジックが実行されないようだ。不便だけどタスクの中にすべての処理を追加する必要がありそう。

タスク内で実行したオブジェクト検索が実行されない

次のようにタスクの最後でreturnしてしまうとクエリは実行されない。

Parse.Cloud.job('job', function(request, status) {
  var Bike = Parse.Object.extend('Bike');
  var query = new Parse.Query(Bike);
  query.equalTo('broken', false);

  query.find({
    success: function(results) {
      // ここが実行されない
    }
  });

  return status.success('success');
});

クエリ実行後にreturnする。

Parse.Cloud.job('job', function(request, status) {
  var Bike = Parse.Object.extend('Bike');
  var query = new Parse.Query(Bike);
  query.equalTo('broken', false);

  query.find({
    success: function(results) {
      return status.success('success');
    }
  });
});

所感

JavaScriptで記述することになるが実行形態としては比較的容易な部類に入ると感じる。実行時の制限も少ない。1タスクで15分以上かかるような処理はそう多くないだろうし、並列処理できるのが20個までなのでこの点だけ注意。

11
11
1

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
11
11