タスクをスケジュールで実行すると完了しない

自動実行ジョブに非推奨とありましたので、以下を参考にタスクのスケジュール実行を試してみました。
https://documentation.concretecms.org/user-guide/running-site/tasks/advanced-task-scheduling

  1. [自動化設定]で[スケジューラー]を[有効]に設定

  2. 1 の schedule:run コマンドを毎分実行するよう crontab に追加
    エックスサーバーの[Cron 設定]では、毎分実行は推奨しない旨の警告が表示されますが、[コマンド]に以下を登録すると動作しました。
    /usr/bin/php7.4 /home/サーバーID/ドメイン名/public_html/concrete/bin/concrete concrete:scheduler:run >> /dev/null 2>&1

  3. [タスク]で[Schedule Recurring Task]に以下を追加
    お試しなので色々追加してみました。

  • キャッシュをクリア
  • ファイル再スキャン
  • 古いページバージョンを削除
  • サムネイル生成
  • サイトマップの生成
  • コンテンツのインデックス再作成(Clear Index はい、インデックス再構築 はい)
  • 統計トラッカー更新

設定した時刻を見計らって[タスク]をリロードすると、[コンテンツのインデックス再作成]が完了していません。
[アクティビティ]を見ると[Currently Running]の表示が以下で止まっています。

Reindex Content
316 / 562

このタスクを[Now]で実行してみると最後まで実行されました。
スケジュールで実行した際のログの最終行は以下のようになっており、この ID のページは下書きでした。

Reindexing page ID: 382

この下書きを削除して再度実行すると、今度はゴミ箱にある下書きで止まりました。
下書きとゴミ箱を空にすると完了できました。

別のサイトでは[サムネイル生成]が完了できませんでした。
Google 翻訳を頼りにどうにか設定してみましたが、タスクをスケジュールで実行する手順はこれで問題ないでしょうか。
また途中で止まったままになっている[Currently Running]の表示を消すことはできますでしょうか。

Concrete CMS バージョン
9.1.1

PHP バージョン
7.4.x

サーバー
エックスサーバー

1 Like

すいません。
僕もタスクのところの設定を試行錯誤しているところです。
確認します。

ご回答ありがとうございました。
現状最後まで実行できないタスクは削除し、それ以外で経過を観察してみようと思います。

Cron は毎分でなくスケジュールと同じ時刻のみ実行でも動作するようですね。
検証の方法や精度にあまり自信はありませんが…

@Jun_22 調査しているのですが、ちょっと時間がかかっています。

確かに、サーバー上にいくつかインストールした 9.1.1 でも Reindex Content が終了できない問題を確認できました。

ただ、僕のローカルにインストールした 9.1.1 では正常に終了してしまい、どこが違うのか調査中です。

今、直面しているエラー

Messenger Worker Message Failed: /....../concrete/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:129 Handling "Concrete\Core\Command\Process\Command\HandleProcessMessageCommand" failed: The EntityManager is closed.

ちなみに 9.0.2 などでは、データベースの文字列によって
以下の様なエラーが発生する様ですが、
これは 9.1.1 では直っています。


SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='```

Concrete CMS バージョン を 9.1.2 へ、PHP バージョンを 8.0.x へ変更し、いくつかのサイトで再度動作を検証しました。
[コンテンツのインデックス再作成]についてはどのタイミングで実行が必要なのか理解できておりませんが、お試しということで含めています。

  • キャッシュをクリア
  • 古いページバージョンを削除
  • サイトマップの生成
  • コンテンツのインデックス再作成(インデックスをクリア いいえ、インデックス再構築 いいえ、再インデックスするオブジェクト ページ)
  • コンテンツのインデックス再作成(インデックスをクリア いいえ、インデックス再構築 いいえ、再インデックスするオブジェクト ファイル)
  • コンテンツのインデックス再作成(インデックスをクリア いいえ、インデックス再構築 いいえ、再インデックスするオブジェクト ユーザー)
  • 統計トラッカー更新

管理画面の[Now]で実行すると、[アクティビティ]ページで

  • [Currently Running]のステータスバーが更新されなくなる
  • エラーダイアログが表示される

といった状態になるサイトもありましたが、しばらく待って再度アクセスすると[Currently Running]の表示は消え、[完了日時]が表示されました。
下書き、ゴミ箱にページのある状態でも、途中で止まることはなくなったようです。

これまで検証した限りではスケジュールで実行した場合も完了しているようです。
[キャッシュをクリア]の実行結果は、[アクティビティ]ページやログファイルには残りませんでした。

バージョン 8 サイトをバージョン 9 へアップデートして[管理画面]-[システムと設定]-[最適化]-[自動実行ジョブ]-[ジョブセット]-[デフォルト]を開くと、登録してあったジョブは見当たらず[ジョブが見つかりませんでした。]と表示されました。
アップデート後はジョブをタスクとして登録し直さねばならないようですので、動作するようになって安心しました。
ありがとうございました。

1 Like

@Jun_22

検証、ありがとうございます!

ケースバイケースなんですが、ほとんどのケースで、1日1回走らせておけば良いと思います。

ページ・ファイル・エクスプレス・ユーザーを公開・編集する時はインデックスが更新されますが、属性自体の設定変更をした時などは、各ページ・ファイル・ユーザーなどは公開・編集していないので、反映されません。

そのような時にコンテンツのインデックス再作成を実行する必要があります。

V8 時点の情報で恐縮ですが、トピック属性を大幅に入れ替える時はインデックスもクリアする必要がありました。

参考になれば幸いです。

ご回答ありがとうございます。
大変参考になります。

ホスティングサービスでは深夜〜早朝にメンテナンス等でサーバーが停止することもあるかと思いますが、ジョブやタスクの実行中にサーバーが止まってしまうとエラーを生じ、サイトが表示されなくなってしまうのではと心配してしまいますね。
管理画面からの実行に比べると、コマンドラインでの実行はずっと短時間で終了するようですので杞憂かもしれませんが…

1 Like

@Jun_22

お世話になります。

ちょっと気になったので、一言だけ。

ホスティングサービスでは深夜〜早朝にメンテナンス等でサーバーが停止することもあるかと思いますが、ジョブやタスクの実行中にサーバーが止まってしまうとエラーを生じ、サイトが表示されなくなってしまうのではと心配してしまいますね。

さくらレンタルサーバーで、朝4時台にジョブ走らせるように運用してるサイトが5年以上ありますが、特にサーバー側のメンテナンスで、ジョブが悪さをしてサイトが壊れたことなどはありませんでした。

コンクリのジョブ・タスクも途中で処理が止まったとしてもサイトが壊れるような設計は基本していないと思います。
(何でもパーフェクトなものはありませんが)

僕は、毎日早朝でジョブを走らせるのもそんなに問題はないかと考えています。

それを聞いて安心いたしました。
ご回答ありがとうございました。

1 Like