web-dev-qa-db-ja.com

正しい間隔で送信するサブスクリプションを取得できません

「サブスクリプション」モジュールを設定し、ページのすべてのメンバーがいくつかのパネルにアクセスできるように設定しました。 1つはEメールの頻度を設定することを可能にし、もう1つはサブスクライブするノードを選択することを可能にします。ノードの選択はうまく機能し、メールの「ダイジェスト」の選択もうまくいきます。

私が抱えている問題は、新しいコンテンツが追加された後、最初のcronイベントのように思われるときに通知メールが送信されることです。これは、サイトにアクセスしないと長い時間になる可能性がありますが、同時に誰かがより長い間隔を選択した場合は早すぎます。

現在、サイトを「テスト」しているのは私だけなので、2人のユーザーにサブスクリプションを設定します。 1つは3時間に1回、もう1つは「1日1回」に設定しました。

Cronはサイトに入るときまたは手動で実行するときにのみ実行されていたので、Cronをより頻繁に実行するだろうと思った「Ultimate Cron」モジュールをダウンロードすることも選択しました(私は30分に設定しています)が、そうではありませんこれを行うと、メッセージが両方のユーザーに送信されますが、メッセージを要求するユーザーが1日に1回しかメッセージを要求していない場合でも、その24時間の間にメッセージが既に受信されています。

私がサイトにアクセスしない場合、両方とも少なくともメッセージを受け取りますが、正しい間隔ではありません。

私たちの組織の主要な主催者の1人は、通知を1日1回または週1回受け取る方法がない限り、彼女はフォーラムやメンバーサイトに参加しないと言っており、彼女はYahooフォーラムを使用するためにプッシュしようとしていますが、私はすべて持っています私が好きなように設定して、この1つの問題を修正できれば、小さな社会のメンバーにそれを公開することができます。

これが私のサブスクリプション設定のスクリーンショットです。私は、関連があると私が信じるものを示すように努めました。過去に試した他のサブスクリプションモジュールを無効にしました。ただし、いくつかのメッセージングモジュールがあります(「メッセージングモジュール」の画像を参照してください)。

subscriptions module

settings a

settings b

settings c

messaging module

更新:再度テストしましたが、正しい間隔ではなく、各cronの実行時にメッセージを受信します。コメントで後述するように、サブスクリプションモジュールの問題である可能性があります。

設定を修正する方法、またはこれを理解するために行コードを調整する方法を誰かが知っている場合は、とても感謝しています。

すでに通知などを試しましたが、サブスクリプションは私が必要とするもの(それが機能した場合)に最適です。

皆さん、ありがとうございました。

2
Dragonwalker

enter image description here cronを3時間ごとに実行するように設定しても、cronが実際に3時間ごとに実行されるわけではありません。これは、完全に自動化されていないためです。何かを実行するためにcronをトリガーする必要があります。このトリガーは、ユーザーがサイトにアクセスしたときに発生します。 Drupalは、ページリクエストの処理の一部として、前回cronが実行されたことを確認し、実行する場合はリクエストの一部としてcronを実行します。cronが3時間ごとに実行するように設定し、最後に実行してから3時間経過すると、その時点でページにアクセスしたユーザーのページリクエストの一部として実行されます。

しかし、トラフィックが極端に少ない場合はどうなりますかDrupalサイト、アプリケーション、またはイントラネット?誰もサイトにアクセスしない場合、cronは実行されません。または、ユーザーがサイトにアクセスし、cronがが実行され、2時間59分後に別のユーザーがサイトにアクセスした場合、まだ3時間経過していないため、cronは実行されません。3人目の訪問者が3時間後にアクセスすると、cronが実行されます。ただし、以前のcron実行。

ソース: なぜDrupal cronが思ったほど頻繁に実行されておらず、それを修正する方法

この問題の解決策は、代わりにcrontabを使用してサーバーからcronを実行/トリガーすることです。

あなたはそれについてここで読むことができます なぜDrupal cronが思ったほど頻繁に実行されておらず、それを修正する方法 そしてC-Panelを使用した解決策を検討します。

C-Panelがない場合は、サーバーにSSHで接続し、サーバーのcrontabに手動でエントリを追加します。

自動化されたcronモジュールには、要求によってトリガーされるという欠点があり、要求を送信する不運なユーザーはかなり長い遅延を経験する可能性があります。このため、自動化されたcronは通常、手動でcronジョブを作成できない小規模なサイトで使用されます。 Linux crontabを使用します。 crontabが必要な場合は、Drupalコンソールコマンドを使用して、(/ admin/config/system/cronで長いURLを表示するのではなく、コンソールのコマンドを使用できます。crontabエントリの例を次に示します:

30 * * * * web_user /var/www/html/vendor/bin/drupal --
root=/var/www/html/docroot cron:execute > /dev/null 2>&1

これは、Drupal cronを1時間に1回、時間の30分後に実行します。

ソース: Automated Cron

1
No Sssweat

これを更新したかった。 Cronの実行を修正した後、サブスクリプションをリセットすると問題なく動作しました。間隔の変更は、変更後に行われたサブスクリプションの選択でのみ機能するため、苦労している他のユーザーにとっては、カテゴリを選択する前に間隔の変更を確実に行うとよいでしょう。これは、毎日のオプションもあるアカウントの問題の一部であった可能性があります。

ご協力ありがとうございます。

ここで、間隔の変更が現在のすべてのサブスクリプションにも作用する方法を追加するだけの場合。 :)

0
Dragonwalker