シェルスクリプト:
echo '/bin/date -d "1 days ago" +"%x"'
シェルスクリプトを端末から直接実行すると、出力は次のようになります。
06/07/2013\n
しかし、crontab でスクリプトを実行すると、出力は次のようになります。
06/07/13\n
出力が上のものと同じであることを願っています。理由が分かる方、教えていただけないでしょうか。
%x
フラグは「ロケールの日付表現」を意味します。chrony には、ユーザーと比較して異なるロケール設定があります。これを確認するにlocale
は、cron ユーザーでコマンドを実行してみてください (つまり* * * * * root locale > /root/cron-locale
、/etc/crontab に追加します)。次のようになります。
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
ユーザーアカウントで実行locale
すると、おそらく次のようなものが返されます。
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
一貫した日付表現を行うには、次を使用します: %Y
、これは 4 文字の年を意味します