cronで動かすとスクリプトが正常に動かない件

| コメント(0) | トラックバック(0)

先日作ったバックアップスクリプトをcronに登録して数日後。サーバの中身を見てみるとなんとそこには10kBほどのtarアーカイブが転がっているだけであった。


  |l、{   j} /,,ィ//|     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  i|:!ヾ、_ノ/ u {:}//ヘ     | あ…ありのまま 今 起こった事を話すぜ!
  |リ u' }  ,ノ _,!V,ハ |     < 『おれはバックアップを取り出そうと
  fト、_{ル{,ィ'eラ , タ人.    |  思ったらいつのまにかゴミファイルを解凍していた』
 ヾ|宀| {´,)⌒`/ |<ヽトiゝ   | 回線落ちだとかtarコマンドのオプション忘れだとか
  ヽ iLレ  u' | | ヾlトハ〉.   | そんなチャチなもんじゃあ 断じてねえ
   ハ !ニ⊇ '/:}  V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ…
  /:::丶'T'' /u' __ /:::::::/`ヽ \____________________ 


シェルスクリプト単体ではちゃんと動くのになんでcronで動かすとゴミファイルになるかなーと思い、早速cronからシステムから送られてくるメールをみたところ

try to create hot copy...
env: python: No such file or directory

と出てた。どうやらhot-backup.pyでコケたらしい。調べたら以下の記事にたどり着いた。
どさにっき #!/usr/bin/env

たとえば FreeBSD では、標準の /etc/crontab は

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

となっていて /usr/local/bin が含まれていない。なので、

#!/usr/bin/env ruby

というスクリプトを /etc/crontab に登録すると、FreeBSD では ruby は /usr/local/bin にあるのが標準なので、インタープリタを見つけられずにエラーになる。

BSDの場合、#!/usr/bin/env hogehoge には気をつけろって事かな。


とりあえずhot-backup.pyの1行目
#!/usr/bin/env pythonを#!/usr/local/bin/pythonに書き換え。直接インタプリタを指定するように修正した。

他にもシェルスクリプト内で export PATH=$PATH:/usr/local/bin って追記する方法がある。

トラックバック(0)

トラックバックURL: https://hoge.sub.jp/blog-cgi/mt/mt-tb.cgi/1312

このブログ記事について

このページは、Lyoが2007年7月31日 17:54に書いたブログ記事です。

ひとつ前のブログ記事は「subversionレポジトリのバックアップ」です。

次のブログ記事は「"-"ハイフンから始まるファイルを消したいor作りたい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 7.9.3