Cronは実行を停止しました。ログには、「cronが既に実行されているときにcronを再実行しようとしています。」


11

タイトルごとにこの問題をトラブルシューティングして解決する手順は何ですか?

手動で実行しようとすると、すぐにページが表示され、「実行中のcronを再実行しようとしています」というエラーメッセージが表示されます。


私は、DBのcronルックスで何で私の頭の上をオフに覚えているが、これに私を指摘し、「既に実行されている間に再実行するcronを試みる」の簡単にGoogleができませんでしたdigitaledgesw.com/node/21それは、かもしれませんD7に適用
Jimajamma

それは非常に奇妙です。そのメッセージは、コアのコード内で、その変数を確認した直後に(drupal_cron_runのlock_acquireを介して)一度だけ検出されます。本当に異なることを示す情報や症状を投稿する場合は、再度開きます。
mpdonadio

提案:新しいDrupalをインストールし、cronを3分ごとに実行するように設定して、同じ効果があるかどうかを確認してみてください!!!
Aboodred1

ちょうど実行:drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
ケノーブ14

4
読者の皆様へ:現在受け入れられている答えは、質問の対象となっているDrupalバージョンであるDrupal 7では正しくありません。Drupal 6で有効ですが、Drupal 7コードが変更されました。Drupal 7がDrupal 6から残っており、クリーンアップされていないことがあります。
kiamlaluno

回答:


12

cronセマフォはおそらくロックされています。コードのどこからでもdrupal_cron_cleanup()を呼び出すことができます(これはたまたまcronによって呼び出されません)。これにより、cronセマフォ変数のロックが解除されます。

Drupal 6でブラシを設定している場合は、次を試すこともできます。

$ drush vdel -y cron_semaphore

3
または、drushではなくdbアクセスがある場合は、変数テーブルから手動で削除します。
マルクス

8
これらの値がテーブルにキャッシュされることを忘れないでくださいcache_bootstrap
tostinni

1
私は、変数テーブル内の任意のcron_semaphoreを見つけられませんでしたので、テーブルの正確な名前は何ですか下さい
モハメド・アミンbourkadi

2
上記のdrushコマンドを実行すると、「cron_semaphore not found。」が表示されます。何か案は?
ナイジェルウォーターズ

1
@NigelWaters Drupal 7では、cronセマフォがロックになりましたdrupal_cron_cleanup()が、更新されていないようです。
キアムルノ

19

概要

次の2つの条件が満たされている場合、表示されているエラーメッセージが発生します。

  • cronジョブが終了しない(エラー)か、終了するのに4分以上かかります。
  • cronを4分ごとよりも頻繁に呼び出します(Drupalの設定ではなく、crontabの設定に従って)

したがって、このエラーメッセージは、cronタスクが失敗するか、実行に時間がかかりすぎることを示しています。(注:あなたはすでに犯人を発見していることを知っていますが、私がしたように、検索でこのページを見つけた人のために答えを追加したかったです)

バックグラウンド

最初に理解すべきことは、Drupal cronタスクの実行方法です。Drupal cronは、サーバー上のcronジョブを介して、またはDrupalのデフォルトである貧乏人のcronを使用する場合はすべてのページの読み込み後に、定期的に呼び出されます。

ただし、cronが呼び出されるたびにcronタスクが実行されるとは限りません-Drupalに設定があり(デフォルトは3時間)、cronタスクを実行する頻度が示されます。ただし、この3時間の遅延は、cronタスクが正常に終了した場合にのみ適用されます。

Drupal 7では、cronはDrupalのロックメカニズムを使用します。これは、協調的で助言的なロックシステムを提供します。このロックシステムの機能の1つは、一定の時間が経過するとロックが期限切れになることです。cronの場合、4分後に期限切れになります。したがって、cronが3分ごとに呼び出され、その時間までに前のcronジョブが終了しなかった場合(クラッシュまたは非常に遅い)、実際にこのエラーメッセージが表示されます。 。

cronを12時間ごとに設定しても、違いはありません。Drupalのcronタスクが失敗または時間がかかりすぎるため、Drupalは実行されていないと想定し、cronが呼び出されたらすぐに実行を再試行します。12時間の遅延は、正常なcron実行にのみ適用されます。

cronセマフォ変数は、Drupal 7にはもう存在しません-これは、Drupalの古いバージョン用でした。Drupal 7では、ロックバックエンドが変更される可能性があるため、手動でロックを解除する信頼性の高い方法はありません。ただし、コアロックメカニズムを使用している場合は、データベースを編集してcronロックを解除できます。

DELETE FROM semaphore WHERE name = 'cron';

しかし、これを行うことで症状を修正するだけです。対処が必要な問題は、cronが失敗する/実行に時間がかかる理由です。


このメッセージが表示されますが、cron_debugを実行すると、すべてのcronジョブが正常に終了し、すぐに実行されます(コアの更新には5秒ほどかかります)。この問題の原因が遅いか、cronルーチンに失敗している場合、cron_debugがそれらを強調しないのはなぜですか?
doub1ejack

1
cron_debugモジュールがどのように機能するかわかりませんので、これについて本当にコメントすることはできません。変数 'c​​ron_safe_threshold'の値は何ですか?「セマフォ」テーブルとはどのようなデータですか?
アリスヒートン

1
これは、Drupal 7の正解です。詳細な説明については、+ 1。
kiamlaluno

ところで、cronが失敗した場合は、Cronデバッグモジュールを使用して、ハングしているモジュールを確認します-10回のうち9回が検索モジュールです。検索モジュールをオフにしてからcronを手動で実行して、何が起こるかを確認してください。それがインデックスにしようとしているノードを検索するには、次のdrupal.stackexchange.com/questions/22825/...
ダンMantyla

4

cron_semaphoreセマフォロックと呼ばれる別のテーブルに移動させ、変数はDrupalの6内に存在しなかったが、あなたは、Drupalの7を使用していますsemaphore

したがって、cronセマフォのロックを解除するソリューションは次のようになります。

Drupal 7

drush sqlq "TRUNCATE semaphore"

Drupal 6

drush -y vdel cron_semaphore 

3
Drupal 7の「それほど極端ではない」バリアント:drush sql-query "DELETE FROM semaphore WHERE name='cron'"
タニウス

2

Cron Debugモジュールを使用して、cronをデバッグできます。

Cron Debugは、cronプロセスを見つけるのに役立ちます。

  • プログラミングまたは実行時エラーが原因で失敗する
  • タイムアウト(PHP、サーバー、データベース)
  • とても遅い

Cron Debugを使用すると、他のcron機能を実行せずに、特定のcron機能の実行をテストすることもできます。これは、独自の機能をテストするたびに、すべてのメンテナンス、アラート、およびその他のタスクで完全なcron.phpを実行したくないcron機能を開発するのに便利です。


1
このモジュールは私にとって命の恩人でした!
ダンマンティラ

ええ、このモジュールは優れています。cronジョブのデバッグに役立ちます。
Nishant

1

これは私がcronの問題を解決した方法です:

  1. PhpMyAdmin経由で、セマフォテーブルを見て行を削除しました name = cron
  2. コマンドライン経由で「cronを削除」を実行しました
  3. エラーメッセージが表示され、問題の手がかりが得られました。これはあなたにとって異なるかもしれませんが、私にとって、インストールされたモジュールとPHPライブラリを共有していた最近アンインストールされたモジュールがエラーを引き起こしていました


0

Drupal 7では、さらに別のオプションとして、

経由しdrush cronて、

WD cron: Attempting to re-run cron while it is already running.       [warning]
Cron run failed.                                                      [error]

これは開発環境で発生し、以前のcronが実行されて中断されたために発生しました。

上のincludes/common.incライン5413、または周りで、あなたはこのブロックを見つけることができ、https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0)) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

変更ifして&& FALSE

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0) && FALSE) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

そして、cronを再実行します。これで実行できるようになります。

これを展開せずに、終了後に元に戻してください。また、デバッグにも役立ちます。


-1

私はこれに何度か思いつきました。Drupal 6では、drushを使用しない場合、次のように修正できます。

1変数テーブルからcron_%変数を削除します。

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";

2 / admin / settings / performanceのDrupalキャッシュをクリアします

ページの下部にある[キャッシュデータを消去]ボタンを押します。

3管理パネルからcronを実行します/ admin / reports / status / run-cronコマンドラインから実行しないでください。問題が発生する可能性があります。

4次回の自動cron実行が正常に完了することを確認します。


Drupal Answersへようこそ!質問はDrupal 7についてです。そのデータベーステーブルから行を削除しても、あまり効果はありません。
kiamlaluno

ああ、OPのDrupal 7向けだと具体的に言っていないので、答えを追加しただけです。これはdrupal 6でうまく機能し、通常の「セマフォの削除」の回答よりも完全です。誰もがd6からここで終わった場合、それが役立つだろうと考えました。それは間違っていましたか?私はそれのためにマークダウンされたようです。
munkiepus 14

コマンドライン部分から実行cronを削除するように更新されましたが、問題を引き起こす可能性があることがわかりました
-munkiepus

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.