UTC 環境で JST 前提のシェルスクリプトを動かす
2021-02-22-1
[Programming]
プログラミングメモ。
サーバ (linux) のタイムゾーンが UTC なんだけど、JST 前提の既存スクリプトをちゃんと動かしたい。
タイムゾーンを変更すればいいだけなんだけど、世の中いろいろな事情があるかもしれないので、その場しのぎの「その他」の対応方法。
シェルスクリプト内の date コマンドでは TZ=JST-9 をつけておく。
実行時のタイムスタンプをファイル名に使う処理とか。
または、スクリプトの頭に環境変数 TZ を設定しておけばあとは OK。
crontab で一日一回 0 時に動かす処理について。
JST の 0 時に動かすためには、9時間前の 15 時に設定する。
なるべくさけたいな、これは……。
crontab:
こちらは、1時間ごとに呼ぶスクリプトの中で 0 時のときだけ動かすことにより「一日一回」を実現する作戦。
crontab:
念のため書いておきますが、可能であるならば素直にサーバのタイムゾーンを変更するのがベストです。
以上。
サーバ (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:
cron-hourly.sh:0 * * * * /home/yto/cron/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
おわりに
念のため書いておきますが、可能であるならば素直にサーバのタイムゾーンを変更するのがベストです。
以上。