web-dev-qa-db-ja.com

ルールを常に特定の時間に実行するようにスケジュールするにはどうすればよいですか?

私のサイトに関する特定の統計を含むビューを含む電子メールを私に送信するルールコンポーネントがあります。

このメールを毎日深夜に送信したいのですが。

ルールは次のようになります。

コンポーネント:アクションセット

  1. メールを送る
  2. 評価のためにコンポーネントを再度スケジュールします(+1日)

次に、深夜に手動でルールをトリガーし、ルールが再度評価されるのを待ちました。これは最初の数日間は機能しましたが、電子メールが午前0時ではなく午前3または4に到着するようになりました。毎日同じ時刻に(または毎日できるだけ同じ時刻に)電子メールを送信したいのです。これを行う方法はありますか?

4
Patrick Kenny

タイトルの元の質問に最後に答えるには、たとえば、次のように書くことで、特定の時間にルールを実行できます。

today + 9 hour

「今日」は常に0:00:00の実際の日であり、「+ X時間」はこれに任意の時間数を追加します。 「時間」は単数で書かれていることに注意してください。その他のキーワードには、「月」、「週」、「日」、「分」、「秒」などがあります。キーワードを組み合わせることができます。さらに多くの機能があります。詳細については、このページを参照してください。

http://php.net/manual/en/datetime.formats.relative.php

2
upunkt

これはどう:

「Scheduled Evaluation Date」セクションで時間を設定しているときに、それを「直接入力」から「選択モード」に変更し、「PHP評価」のオプションが表示される場所までスクロールします

以下に貼り付けます。

<?php
$midnight = strtotime('midnight');
echo date("Y-m-d h:i:s", $midnight);
?>

これは '2013-03-25 12:00:'のようなものを返すはずです//これは今日のために返されるものです!

Phpブラケットを含める必要があります。 strtotime()関数は現在の日付の深夜0時を返すはずなので、うまくいくはずです。これは実行中のcronに基づいているため、正確ではなく、真夜中を少し過ぎて評価されるはずであり、「当日の真夜中」の日が正確に必要なものになるはずです。多分あなたはこれをより良くするphp Tweakを見つけることができます...

とにかく、それが機能するかどうかをお知らせください!

5

私はあなたがより確実に望むことをするかもしれないモジュールを書きました:

https://www.drupal.org/project/rules_onceperday

ルールイベントはcronによってトリガーされますが、イベントが発生する時間を指定でき、その時間の後にcronが最初に実行されるときに実行されます。

イベントがトリガーされる時刻を指定するだけでなく、イベントを実行できる曜日を指定できる曜日の条件もあります。

2
Fonant