1

私は周りを検索しましたが、探しているものを正確に見つけることができませんでした。

私のサイトの管理者が毎日の Cron ジョブ スクリプトを実行する時間を選択できる PHP 設定ページがあります。私crontabの場合、スクリプトを 1 時間ごとに実行しています。スクリプトが実行されると、現在の時間が設定ページで要求された時間と等しいかどうかがチェックされます。

私がこのようにした理由はcrontab、主題について多くのテストと調査を行ったにもかかわらず、PHP を介してファイルを編集する方法を絶対に理解できなかったためです。これを行う方法を理解するのを手伝ってくれればボーナスポイント。

この質問を作成する本当の理由は、Unix サーバーの `time に問題があるためです。私のローカルホスト マシン (IIS) では、Cron スクリプトが想定どおりに 1 時間ごとに実行されますが、すべてを Unix Amazon マシンに移動すると、時間は正確に 5 時間ずれます。

Cron ジョブは想定どおり 1 時間ごとに実行されますが、PHP スクリプトが現在の時刻 ( を使用) が設定時刻と一致するかどうかを確認すると、date("G")意図したとおりに動作しません。確かに、最終的には正確に 5 時間遅れて処理されます。

私が中部時間帯に住んでいるのは偶然ではないと思います.5時間ずれているので、それに関連しているとほぼ確信しています.

時間を常に 5 時間オフセットする回避策を書くこともできますが、これにより日付フィールドが不正確になり (私が思うに)、少し無理が​​あります。多くの人がこれを読んでいて、答えがわからないのはばかだと思っていると確信しているので、SOで聞いてみたいと思います。

もう一つ:

スクリプトにこのコード行があります。他に共有する必要があることはありますか?

date_default_timezone_set('America/Chicago');

編集:あなたの「修正」が何であるかについての説明をいただければ幸いです。

4

1 に答える 1

2

ここでいくつか質問がありますが、それらすべてに答えるには時間がかかりますが、可能な限りざっと目を通すようにします。

  • crontabを編集するには、rootユーザーではなくWebサーバーユーザーのcrontabを編集する必要があります。または、root crontabを編集する場合は、sudoを構成して、Webサーバーユーザーがそのcrontabを具体的に編集できるようにする必要があります。導入しているパラダイムはおそらく優れています。単一のcronをインストールしてから、ロジックの大部分をcronによって呼び出されるPHPスクリプトに配置するだけです。
  • phpの日付が異なる場合に発生する問題は、最初のコメントで示唆されているように、他のスレッドの重複を定義することです。php.iniにアクセスできる場合は、それに応じてdate.timezoneを設定する必要があります。また、ユーザーがボックスが実行されているタイムゾーンにいない場合は、何があってもタイムゾーンオフセットを調整する必要があります。
  • ちなみにもう1つ言及すべきことは、OSからPHPを介して。のようなものを介して日付値を取得できることです$sLinuxDate = shell_exec('date');。おそらく、私が述べたように、php.iniを介してPHPとOSの間のタイムゾーンを正しく設定したいと思うでしょう。
于 2012-06-26T15:57:39.610 に答える