メインコンテンツまでスキップ

スケジューラー

定義された時間間隔で関数を実行します。

スケジューラーは、関数に適用されるとUTC(協定世界時)に基づいて定期的に実行されるようになるデコレーターの一種です。スケジュールの指定は通常、UTCのcron式を使用して行われます。

関数自身は、データベースへの問い合わせ、メール送信、API呼び出しなど、あらゆるアクションを実行できます。

The @scheduler decorator takes a cron expression as a parameter. A cron expression is a string that defines when the function should run, based on Coordinated Universal Time (UTC). It's important to convert the desired times to UTC when defining the expression. The cron expression is defined as follows:

* * * * * *
| | | | | |
| | | | | day of week
| | | | months
| | | day of month
| | hours
| minutes
seconds (optional)

Backend SDK の CronExpression enum を使用してアクセスできる、あらかじめ定義されたcron間隔もあります。

スケジューラーの作成

スケジューラーを作成するには、基本の SquidService クラスを拡張したクラス内の関数に @scheduler デコレーターを使用します:

Backend code
import { CronExpression, SquidService, scheduler } from '@squidcloud/backend';

export class ExampleService extends SquidService {
@scheduler('sendEmailReminders', CronExpression.EVERY_MINUTE)
async sendEmailReminders(): Promise<void> {
// TODO - implement email functionality
}
}

exclusive パラメーター

@scheduler デコレーターは、実行する関数の名前、間隔、そして関数が独占的に実行されるかどうかを決定する3つのパラメーターを取ります。exclusive パラメーターはブール値です。これが true に設定されている場合、同時に実行されるスケジューラーは1つだけになります。もしあるインスタンスが実行中である間に新たにインスタンスが実行される予定になった場合、新しいインスタンスはスキップされます。

例えば、毎分実行されるスケジューラーがあって、前回のインスタンスが1分後もまだ実行中の場合、新しいインスタンスは実行されません。exclusive のデフォルト値は true です。

Backend code
@scheduler('sendEmailReminders', CronExpression.EVERY_MINUTE, true)

false に設定された場合、前のインスタンスが完了しているかどうかに関係なく、スケジューラーのインスタンスが実行されます。つまり、同時に複数のインスタンスが実行される可能性があります。

スケジューラーの無効化

スケジューラーは無効化および有効化が可能です。無効化されたスケジューラーは再度有効化されるまで実行されません。無効化されたスケジューラーは再デプロイに渡ってその状態を維持しますが、undeploy後に行われるデプロイではすべてのスケジューラーが有効になります。

Backend code
await this.squid.schedulers.disable('schedulerId');

// Re-enable the scheduler at a later time
await this.squid.schedulers.enable('schedulerId');

list メソッドを使用してすべてのスケジューラーを確認することもできます。これにより、各スケジューラーの現在の状態(enabled/disabled)が返されます。

Backend code
await this.squid.schedulers.list();

サービスのエクスポート

Squid がスケジューラーおよび同じサービス内の他の機能を検出できるようにするため、サービスが service/index.ts ファイルでエクスポートされていることを確認してください:

export * from './example-service';