1

シェルスクリプト:

echo '/bin/date -d "1 days ago" +"%x"'

シェルスクリプトを端末から直接実行すると、出力は次のようになります。

06/07/2013\n

しかし、crontab でスクリプトを実行すると、出力は次のようになります。

06/07/13\n

出力が上のものと同じであることを願っています。理由が分かる方、教えていただけないでしょうか。

4

1 に答える 1

4

%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 文字の年を意味します

于 2013-06-08T02:57:49.137 に答える