crontab内でdateコマンドがうまく動かない

事象

crontab内で出力ファイルに日付を付与したかった。
そのため、dateコマンドを利用したいが、以下が詰まった。

  • "+%Y%m%d_%H%M%S" 部分がcron内ではエラーになる
  • cronで実行するとJSTではなくUTC実行になる

対応方法

フォーマットの問題

\でエスケープする必要がある。
qiita.com

cronでJSTではなくUTCになる

実行ユーザーの環境変数TZがUTCである。
変更すれば一番てっとり早いがこれだけのために変えたくない。
通常の実行であれば、以下で変更可能である。

TZ=JST date

しかしながら、どうもcron内ではTZの評価は揮発するみたいである。
そのため、dateを実行しただけとなり、UTCとして出力されてしまう。
多少強引ではあるが、時間をUTCに対して足しこむ事で対応する事とした。

date -d "9 hour"

blog.offline-net.com