たつをの ChangeLog : 2021-02-22

プログラミングメモ。

サーバ (linux) のタイムゾーンが UTC なんだけど、JST 前提の既存スクリプトをちゃんと動かしたい。
タイムゾーンを変更すればいいだけなんだけど、世の中いろいろな事情があるかもしれないので、その場しのぎの「その他」の対応方法。

date


シェルスクリプト内の date コマンドでは TZ=JST-9 をつけておく。
実行時のタイムスタンプをファイル名に使う処理とか。

ymdh=`date +%Y%m%d%H`
do.sh > $dir/log/$ymdh.tsv
↓
ymdh=`TZ=JST-9 date +%Y%m%d%H`
do.sh > $dir/log/$ymdh.tsv

または、スクリプトの頭に環境変数 TZ を設定しておけばあとは OK。

export TZ=JST-9
ymdh=`date +%Y%m%d%H`
do.sh > $dir/log/$ymdh.tsv

crontab


crontab で一日一回 0 時に動かす処理について。

JST の 0 時に動かすためには、9時間前の 15 時に設定する。
なるべくさけたいな、これは……。

crontab:
0 0 * * * /home/yto/cron/cron-daily.sh
↓
0 15 * * * /home/yto/cron/cron-daily.sh

こちらは、1時間ごとに呼ぶスクリプトの中で 0 時のときだけ動かすことにより「一日一回」を実現する作戦。

crontab:
0 * * * * /home/yto/cron/cron-hourly.sh
cron-hourly.sh:
#!/usr/bin/zsh
export TZ=JST-9
ymdh=`date +%Y%m%d%H`
hour=`date +%H`
if [ $hour = 00 ]; then
  # 一日一回、0時にやる処理
  # ...
  # ...
fi

おわりに


念のため書いておきますが、可能であるならば素直にサーバのタイムゾーンを変更するのがベストです。
以上。

関連記事


たつをの ChangeLog
Powered by chalow