背景
最近、タイムスタンプに基づいて、ファイルが特定の時点から変更があったかどうか確認するシェルを実装したんですけど、 なぜかcrontabで実行したら、ちゃんとした結果が得られませんした。
シェルについて
test.sh
#!/bin/sh echo "**** Timestamp test ****" ls -l | head -3 echo "**** /Timestamp test ****"
このシェルの実行結果は、以下となります。
P46575:study woohyeok.kim$ ./test.sh **** Timestamp test **** total 619544 drwxr-xr-x@ 11 woohyeok.kim INTRA\Domain Users 374 Aug 13 09:56 HotelReservation -rw-r--r--@ 1 woohyeok.kim INTRA\Domain Users 34425086 Jul 19 16:56 Maven Project for ATDD hands-on exercise.zip **** /Timestamp test ****
cronに登録
このシェルをクーロンに登録して、また実行の結果を見てみます。
crontab
20 * * * * /Users/woohyeok.kim/Desktop/study/test.sh >> /Users/woohyeok.kim/Desktop/study/test.log 2>&1
したら、出力が
**** Timestamp test **** total 7296 drwx------@ 7 woohyeok.kim INTRA\Domain Users 238 8 13 10:19 Applications drwx------ 2 woohyeok.kim INTRA\Domain Users 68 3 28 13:23 Box Sync **** /Timestamp test ****
タイムスタンプの形が違うんです。
なぜ?
実はクーロン上に、こういう変数が宣言されてました。
LC_ALL=ja_JP.UTF-8
何が言いたいかというと、 クーロンって、あくまで自分のジョブスケジュールなので、実行するユーザは同一ではありますが、 環境変数のスコープなどによって、普通にコマンドを叩く時と結果が違う恐れがあるということです。
それが?
せっかく実装して、上司に終わりましたーって報告したのに 実はクーロン上では動作しないシェルだったらどうでしょうか。
そういうのを防ぐために、シェルを実装するときは、いつもクーロンで試してみましょうー