してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

FreeBSDのタイムゾーンとcronを設定してみる。

[2017年9月8日版]

Azureにインストールした直後のFreeBSDのタイムゾーンは、UTC(世界標準時)で稼働しています。

そのためログに記載される時刻もやはり、UTCのためJST(日本標準時)と差がでてしまいます。

日本で使用するサーバなら、日本の標準時でログなどを記録したいところです。

ということで、このページでは、AzureのFreeBSDにおけるタイムゾーン設定と、cronの設定を行います。

 

まだの方は、以下のリンクから、Microsoft AzureのFreeBSDをインストールしてください。

 

タイムゾーンの設定について

FreeBSDでは、タイムゾーンの設定を、localtimeファイルを/etcフォルダに設置することで行います。

つまり、/etc/localtimeファイルを設置することで行います。

このファイル中身はバイナリなので、あらかじめ用意されたファイルをコピーしてきます。

 

タイムゾーン設定のバイナリファイルは、/usr/share/zoneinfoフォルダの配下にあります。

# ls /usr/share/zoneinfo
Africa          Asia            CST6CDT         Etc             Indian          Pacific         UTC
America         Atlantic        EET             Europe          MET             posixrules      WET
Antarctica      Australia       EST             Factory         MST             PST8PDT         zone.tab
Arctic          CET             EST5EDT         HST             MST7MDT         SystemV

「Asia」フォルダがあるので、さらに覗きます。

# ls /usr/share/zoneinfo/Asia
Aden            Barnaul         Dushanbe        Jerusalem       Macau           Pontianak       Srednekolymsk   Vientiane
Almaty          Beirut          Famagusta       Kabul           Magadan         Pyongyang       Taipei          Vladivostok
Amman           Bishkek         Gaza            Kamchatka       Makassar        Qatar           Tashkent        Yakutsk
Anadyr          Brunei          Hebron          Karachi         Manila          Qyzylorda       Tbilisi         Yangon
Aqtau           Chita           Ho_Chi_Minh     Kathmandu       Muscat          Rangoon         Tehran          Yekaterinburg
Aqtobe          Choibalsan      Hong_Kong       Khandyga        Nicosia         Riyadh          Thimphu         Yerevan
Ashgabat        Colombo         Hovd            Kolkata         Novokuznetsk    Sakhalin        Tokyo
Baghdad         Damascus        Irkutsk         Krasnoyarsk     Novosibirsk     Samarkand       Tomsk
Bahrain         Dhaka           Istanbul        Kuala_Lumpur    Omsk            Seoul           Ulaanbaatar
Baku            Dili            Jakarta         Kuching         Oral            Shanghai        Urumqi
Bangkok         Dubai           Jayapura        Kuwait          Phnom_Penh      Singapore       Ust-Nera	
	

「Tokyo」をみつけました。

これをコピーします。

タイムゾーンを日本時間(JST)に設定する。

ということでタイムゾーンのバイナリファイルを見つけたので、/etc配下にコピーします。

$ sudo su
# date
 2017年 9月 8日 金曜日 00時50分50秒 UTC
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# date
2017年 9月 8日 金曜日 09時50分58秒 JST
#

これで、dateコマンドの日時がJST(日本時間)になりました。

 

ところが、これだけではまだ不十分です。

cronのタイムゾーンを設定しないと、cronはUTC時間を基準に動作し続けます。

つづいては、cronのタイムゾーンを設定します。

cronのタイムゾーンを日本時間(JST)に設定する。

FreeBSDの場合、rootユーザのcrontabファイルは、/etc/crontabにあります。

/etc/crontabにタイムゾーンの設定が無い場合、cronは、crontabに記載の時刻をUTCとして扱います。

そのため前述の方法で、/etc/localtimeファイルを設置しただけでは、cronの動作は変わりません。

そこで、crontabファイルにタイムゾーンの設定を追記します。

# vi /etc/crontab

ここで、以下のように、CRON_TZ="Japan"を追記します。

/etc/crontab
#
# $FreeBSD: releng/11.0/etc/crontab 194170 2009-06-14 06:37:19Z brian $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
CRON_TZ="Japan"
#
#minute hour    mday    month   wday    who     command
#
*/5     *       *       *       *       root    /usr/libexec/atrun
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11    *       *       *       *       operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog
#
# Perform daily/weekly/monthly maintenance.
1       3       *       *       *       root    periodic daily
15      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time.  See adjkerntz(8) for details.
1,31    0-5     *       *       *       root    adjkerntz -a	
	

これだけでは、cronデーモンにタイムゾーンが反映しません。

cronデーモンのリスタートが必要になりますので、以下のコマンドを打ちます。

# /etc/rc.d/cron restart

cronの動作確認

cronのログは、/var/log/cronに出力されます。

たとえば、日本時間の午前9時にcronデーモンを再起動した場合、以下のようなログが出ればOKです。

いずれも日本時間の午前9時ごろのログです。

1行目から4行目までは、cronデーモンのリスタート前です。そのため、UTC(世界標準時)で出力されます。

5行目がcronデーモンノンリスタート後になります。以降、JST(日本標準時)で出力されます。

# tail -f /var/log/cron
Sep  8 00:00:00 site3 /usr/sbin/cron[66080]: (root) CMD (newsyslog)
Sep 8 00:00:00 site3 /usr/sbin/cron[66081]: (operator) CMD (/usr/libexec/save-entropy)
Sep 8 00:00:00 site3 /usr/sbin/cron[66082]: (root) CMD (/usr/libexec/atrun)
Sep 8 00:01:00 site3 /usr/sbin/cron[66107]: (root) CMD (adjkerntz -a)
Sep 8 09:05:00 site3 /usr/sbin/cron[66185]: (root) CMD (/usr/libexec/atrun)

これで、cronデーモンも、日本時間にあわせて動作するようになりました。

[TOPページ] >> トップページに戻る

©Copyrights 2015-2018, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。