Grav スケジューラーは Grav1.6 で追加された新機能で、定期的にジョブを実行させることができます。根本的な処理はサーバの cron スケジューラーに依存しますが、cron サービスに一度でもエントリを追加すれば、すべてのジョブや特定のスケジュールを Grav から設定することが可能です。
スケジューラーを利用してタスクを処理する主な利点の 1 つは、ユーザーの操作なしで、フロントエンドから独立して実行できることです。定期的なキャッシュクリア、バックアップ、同期、検索インデックス作成などのタスクは、すべてスケジュールジョブの有力な利用方法です。
The first step in getting the scheduler setup and ready for tasks, is to add the bin/grav scheduler
command to the cron service. The simplest approach is to utilize the CLI command itself to output the appropriate command to run for installation:
$ bin/grav scheduler -i
Install Scheduler
=================
[ERROR] You still need to set up Grav's Scheduler in your crontab
! [NOTE] To install, run the following command from your terminal:
(crontab -l; echo "* * * * * cd /Users/andym/grav;/usr/local/bin/php bin/grav scheduler 1>> /dev/null 2>&1") | crontab -
私の Mac だと、必要なコマンドはすべて表示されるので、表示されたコマンドをすべてコピーしてターミナルに貼り付け、リターンキーを押すだけです。
シェルには、ウェブサーバーと同じユーザーでログインする必要があります。これは、schdeduler コマンドを実行するユーザーと、それらのファイルを操作する必要のあるウェブサーバーユーザーが一致することを保証するためです。別のユーザー(例えば root
)で crontab エントリーをインストールした場合、作成されるファイルはすべて、root
ユーザーとして作成され、問題につながる可能性があります。
(crontab -l; echo "* * * * * cd /Users/andym/grav;/usr/local/bin/php bin/grav scheduler 1>> /dev/null 2>&1") | crontab -
応答は得られませんが、エラーも出ないはずです。その後、bin/grav scheduler -i
コマンドを再実行することで、正常に動作していることが確認できます。
bin/grav scheduler -i
Install Scheduler
=================
[OK] All Ready! You have already set up Grav's Scheduler in your crontab
You can also get the needed command from the admin plugin by simply navigating to Tools → Scheduler.
ジョブをスケジュールする場合、柔軟なフォーマットで実行頻度をコントロールできます。
* * * * * *
| | | | | |
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
例:
0 * * * *
1 時間に 1 回実行 (毎時 0 分に実行)
0 0 * * *
1 日に 1 回実行 (毎日 0 時 0分に実行)
0 0 1 * *
1 月に 1 回実行 (毎月 1 日 0 時 0分に実行)
0 0 1 1 *
1 年に 1 回実行 (毎年 1 月 1 日 0 時 0分に実行)
高度なオプション:
*/5 * * * *
5分毎に実行
bin/grav scheduler -j
コマンドを実行すると、スケジューラーに登録されている利用可能なジョブを確認することができます。
bin/grav scheduler -j
Scheduler Jobs Listing
======================
┌─────────────────────┬────────────────────────────────────┬───────────┬─────────┬──────────────────┬─────────┐
│ Job ID │ Command │ Run At │ Status │ Last Run │ State │
├─────────────────────┼────────────────────────────────────┼───────────┼─────────┼──────────────────┼─────────┤
│ cache-purge │ Grav\Common\Cache::purgeJob │ * * * * * │ Success │ 2019-02-21 11:23 │ Enabled │
│ cache-clear │ Grav\Common\Cache::clearJob │ * * * * * │ Success │ 2019-02-21 11:23 │ Enabled │
│ default-site-backup │ Grav\Common\Backup\Backups::backup │ 0 3 * * * │ Ready │ Never │ Enabled │
│ pages-backup │ Grav\Common\Backup\Backups::backup │ * 3 * * * │ Success │ 2018-09-20 09:55 │ Enabled │
│ ls-job │ ls │ * * * * * │ Success │ 2019-02-21 11:23 │ Enabled │
└─────────────────────┴────────────────────────────────────┴───────────┴─────────┴──────────────────┴─────────┘
! [NOTE] For error details run "bin/grav scheduler -d"
Grav スケジューラは、user/config/scheduler.yaml
ファイルでコントロールされます。ジョブを実行するためには、設定を enabled
にしておく必要があります。
以下のように設定され、実行を停止するには disabled
に設定するだけです。
status:
ls-job: enabled
cache-purge: enabled
cache-clear: enabled
default-site-backup: enabled
pages-backup: enabled
エラーの詳細や、次に実行されるジョブを確認するには、/bin/grav scheduler -d
コマンドを使用します。
bin/grav scheduler -d
Job Details
===========
┌─────────────────────┬──────────────────┬──────────────────┬────────┐
│ Job ID │ Last Run │ Next Run │ Errors │
├─────────────────────┼──────────────────┼──────────────────┼────────┤
│ cache-purge │ 2019-02-21 11:29 │ 2019-02-21 11:31 │ None │
│ cache-clear │ 2019-02-21 11:29 │ 2019-02-21 11:31 │ None │
│ default-site-backup │ Never │ 2019-02-22 03:00 │ None │
│ pages-backup │ 2018-09-20 09:55 │ 2019-02-22 03:00 │ None │
│ ls-job │ 2019-02-21 11:29 │ 2019-02-21 11:31 │ None │
└─────────────────────┴──────────────────┴──────────────────┴────────┘
The CLI command provides an simple way to manually run any jobs. In fact this is what the scheduler is doing when it runs periodically.
bin/grav scheduler
This will silently run the jobs, but you can also see details of what run using:
bin/grav scheduler -v
The Grav core provides a few jobs out-of-the-box. These include some useful maintenance type tasks:
cache-purge
- This task is useful if you use Grav's file
caching because it clears out old files that have expired. This is a great task to schedule as otherwise it would require a user to manually clear the old caches. If you don't keep up on this, and your file space is limited, you could run out of space and crash the server.
cache-clear
- The cache clear is the job that works the same way as the bin/grav clear
command that you would manually run. You can configure if you want to use a standard
cache clearing, or the all
variant that deletes all the files and folders in the cache/
folder for a more thorough cache clearing.
default-site-backup
- The default backup job available via the new Grav Backup configuration. You can create custom backup configurations, and these will also be available to run as a scheduled job.
The Grav Scheduler can be manually configured with any number of custom jobs. These can be setup in the same scheduler.yaml
configuration file referenced above. For example, the ls-job
referenced above would be configured:
custom_jobs:
ls-job:
command: ls
args: '-lah'
at: '* * * * *'
output: logs/cron-ls.out
output_mode: overwrite
email: user@email.com
The command should be any local script that can be run from the command line/terminal. Only the command
and the at
attributes are required.
One of the most powerful feature of the Grav Scheduler, is the ability for 3rd party plugins to provide their own jobs. A great example of this is provided by the TNTSearch
plugin. TNTSearch is a full-featured text search engine that requires content to be indexed before it can be searched. This indexing job can be performed in a variety of ways, but the Grav Scheduler allows you to reindex your content periodically rather than having to do so manually.
The first step is for your plugin to subscribe to the onSchedulerInitialized()
event. And then create a method in your plugin file that can add a custom job when called:
public function onSchedulerInitialized(Event $e): void
{
$config = $this->config();
if (!empty($config['scheduled_index']['enabled'])) {
$scheduler = $e['scheduler'];
$at = $config['scheduled_index']['at'] ?? '* * * * *';
$logs = $config['scheduled_index']['logs'] ?? '';
$job = $scheduler->addFunction('Grav\Plugin\TNTSearchPlugin::indexJob', [], 'tntsearch-index');
$job->at($at);
$job->output($logs);
$job->backlink('/plugins/tntsearch');
}
}
Here, you can see how some relevant scheduler configuration is obtained from the TNTSearch plugin's configuration settings, and then a new Job
is created with a static function called indexJob()
.
オリジナル : https://learn.getgrav.org/17/advanced/scheduler