web-dev-qa-db-ja.com

異なるタイムゾーンで実行しているcronと日付コマンドが異なるタイムゾーンを表示する

CentOSを使用していて、シェルでdateコマンドを実行すると、次のような結果が返されます。

2011年4月28日(木)14:08:20 GMT

ただし、cronジョブはPST時に実行されています。

15 7 * * *コマンド

7 GMTではなく7 PSTで実行されます。これがなぜ起こっているのか教えてください。

ありがとう

Hwclockコマンドの出力:

/usr/sbin/hwclock --utc既知の方法でハードウェアクロックにアクセスできません。
--debugオプションを使用して、アクセス方法の検索の詳細を表示します。

そして、デバッグを使用して実行した場合:
/usr/sbin/hwclock --debug util-linux-2.13-pre7 hwclockからのhwclock:/ dev/rtcのオープンに失敗しました、errno = 2:そのようなファイルまたはディレクトリはありません。使用可能なクロックインターフェイスが見つかりません。既知の方法でハードウェアクロックにアクセスできない

8
shashuec

おそらくあなたの問題ではありませんが、言及する価値があります-crondがロードされた後に/ etc/localtimeが変更された場合、それは引き続き前のタイムゾーンのままです。 crondを再起動/リロードするだけで、この変更が反映されます。

もう1つの「問題」は、cronがTZ環境変数に準拠することです。これはcrontabのインラインで設定でき、それに続くすべての行に影響しますが、crondをロードする環境でTZが設定されている可能性が高いようです。

これらの2つのジョブを実行するかどうか、いつ実行するかを決定するために、次の2つのバリエーション(hr/minフィールドを調整)を試しました。 /tmp/tzout.localtimeに詰め込まれる出力は、$ TZが何らかの方法でcrondをロードしている環境で設定されているかどうかについてのヒントも提供します。

* * * * *     echo $TZ `date` >> /tmp/tzout.localtime
TZ=GMT
* * * * *     echo $TZ `date` >> /tmp/tzout.gmt

私はあなたの問題がどこにあるのか正確に知っているとは主張していませんが、うまくいけばこれは解決策に少し光を投げかけるでしょう!

7
walkeran

質問は少し古いですが、タイムゾーンを変更し、crondに変更を認識させることは、CentOSの問題です。タイムゾーンを変更した後、syslogデーモンも再起動する必要があることを発見しました

/etc/init.d/rsyslog

参照 Timzoneはログファイルに対してのみ間違っていますか?

5
MarcFasel

タイムゾーンを変更するには2つの方法があります(少なくともCentOS 5、6、7、および対応するRHEL 5、6、7ディストリビューション、CentOS 6および7にそれぞれ基づくAmazon LinuxおよびAmazon Linux 2)。影響を与えようとしている対象の範囲によって異なります。

まず、tzselectを実行して(大陸、国、タイムゾーンを選択)、TZ環境変数の正しい値を取得する必要があります。次に、

1.コマンドラインから実行するプログラムのすべての対話型シェルプロセスのタイムゾーンを変更するには、出力される指示に従います(ここでは、米国東部標準時のTZ値を示しています)。

You can make this change permanent for yourself by appending the line
        TZ='America/New_York'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in Shell scripts:
America/New_York

2.しかし、syslog、crond、mysql、Apache、およびブート時にinitシステムによって生成されたその他のデーモンプロセスによって使用される「システム」タイムゾーンを変更するには、rootになり、次の2つのファイルを変更する必要があります。

/etc/sysconfig/clock
/etc/localtime

たとえば、テキサスまたはカリフォルニアでホストされているサーバーを使用している場合、これらは中央時間または太平洋時間を指していることがわかりました。これは私にとって不便であり、すべてのユーザー、開発者、システム管理者も東海岸にいるので、システム時間、私はこれらのステップを行います:

# step 1
Sudo vim /etc/sysconfig/clock

# change ZONE from UTC (or whatever it is) to your local TZ value:
ZONE="America/New York"

# (but leave this 2nd line alone!)
UTC=True


# step 2: copy your TZ value's dir/file (under zoneinfo) onto /etc/localtime
Sudo cp -v /usr/share/zoneinfo/America/New_York /etc/localtime

# step 3
reboot

# Or if all you care about is crond, for instance, just
Sudo systemctl restart crond.service # for CentOS 7 / Amazon Linux 2

# Or mysql on older init.d style RHEL 6 / CentOS 6 / Amazon Linux systems:
Sudo /etc/init.d/mysqld restart
0
gigawatt

「cron」は、設定されたタイムゾーンのクロックではなく、ハードウェアクロックに基づいて実行されると思います。 「日付」はユーザーが設定したタイムゾーンに変更されるため、「日付」ではなく「hwclock」を見てみてください。

0
TheCompWiz