数年前、私はwatchdogをオフにしたかったのですが、それはメモリとデータベースの消費であるためですが、今日はなぜ私cronは、Searchモジュールを使用する必要があるため、実行されていませんか?
cronを手動で実行しようとしています(admin/reports/status/run-cron)return
cronの実行に失敗しました。
/ cron.phpを呼び出してサーバーのコマンドラインから実行すると、リターンがありません。
これをデバッグするにはどうすればよいですか?
または
ロギングをオンにする他の方法はありますか?
admin/settings/logging/dblog
リターンがありません
SELECT * FROM `watchdog`
MySQLが空の結果セットを返しました
function watchdog()
bootstrap.incにまだあります
settings.phpおよび。htaccess関連する「エラー」、「ウォッチ」、「 dog "、" bdlog "、" repor "キーワード(ないphp.ini)
/modules/dblog/dblog.module
まだ手つかず。 XMLサイトマップ およびSearchが無効になっています
いいえlogging、いいえcron、私は困惑しています。助けてくれてありがとう。
watchdog()
メッセージの記録を有効にするには、Database loggingモジュール(短い名前:dblog)を有効にするだけです。有効にすると、admin/reports/dblogで最近のログエントリの読み取りを開始します。
Cronを返す可能性のあるエラーについては、次のエラーがあります。
これは、Drupalコードから明らかです。admin/ reports/status/run-cronに移動したときに実行される関数は system_cron_run()
であり、 drupal_cron_run()
がTRUE
を返さない場合に表示されるエラーを返します。これはその関数コードです。
// Try to allocate enough time to run all the hook_cron implementations.
if (function_exists('set_time_limit')) {
@set_time_limit(240);
}
// Fetch the cron semaphore
$semaphore = variable_get('cron_semaphore', FALSE);
if ($semaphore) {
if (time() - $semaphore > 3600) {
// Either cron has been running for more than an hour or the semaphore
// was not reset due to a database error.
watchdog('cron', 'Cron has been running for more than an hour and is most likely stuck.', array(), WATCHDOG_ERROR);
// Release cron semaphore
variable_del('cron_semaphore');
}
else {
// Cron is still running normally.
watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
}
}
else {
// Register shutdown callback
register_shutdown_function('drupal_cron_cleanup');
// Lock cron semaphore
variable_set('cron_semaphore', time());
// Iterate through the modules calling their cron handlers (if any):
module_invoke_all('cron');
// Record cron time
variable_set('cron_last', time());
watchdog('cron', 'Cron run completed.', array(), WATCHDOG_NOTICE);
// Release cron semaphore
variable_del('cron_semaphore');
// Return TRUE so other functions can check if it did run successfully
return TRUE;
}
Drupalはcronがまだ実行中であると考えますが、これはコードのエラー(通常はhook_cron()
実装の1つ)がdrupal_cron_run()
を許可しない場合に発生します次の行を実行します。
// Release cron semaphore
variable_del('cron_semaphore');
つまり、cronが正しく機能しない理由をデバッグするには、hook_cron()
の実装を確認して、何が問題なのかを確認する必要があります。また、hook_node_view()
を誤って呼び出しているdrupal_goto()
の実装が問題である可能性もあります。
Database logging
を有効にすることはwatchdogを有効にする解決策でした(@kiamlalunoに感謝します)。これはcronを実行した後のメッセージです。
メッセージcronが既に実行されているときにcronを再実行しようとしています。
cron_semaphore
原因を手動で削除しています
Cronは正常に実行されました
Searchモジュールが有効な原因
内部サーバーエラー-500
次に、これをsearch.moduleで変更するだけで問題が解決しました。
function search_cron() {
// Update Word index
-- foreach (module_list() as $module) {
++ foreach (module_list(true, true, false) as $module) {
Drushをサイトで利用できる場合は、そのDrupalサイトのドキュメントルートから実行できます。
drush cron
さらにトラブルシューティングできるように、エラーが出力されます。また、drushがある場合は、次のようにdblogを有効にすることができます。
drush en -y dblog