2011-06-02 9 views
0

Mac OS 10.6 Serverでのcronの動作に完全に困惑しています。 「script.shは」wgetコマンドが含まれていますがmac os 10.6 server:crontabはwgetスクリプトを起動しません。

00 16 * * * /Users/myusername/script.sh 
04 16 * * * /Users/myusername/crontest.sh 

#!/bin/sh 
wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/' 

「crontest.shはちょうどテストスクリプトが含まれています

私はこのようなcronジョブで2つのスクリプトを実行しようとしています
echo "hi" >> /Users/myusername/crontest.txt 

問題は 'script.sh'は発生しませんが、 'crontest.sh'は発生します。 wgetスクリプトが起動しない原因は何ですか?スクリプトには特定のエンコーディングが必要ですか? cronはどこかにログファイルを書きますか?

(私はそれが正常に動作殻にそれ自体でwgetコマンドをテストしました。)明白なことを尋ねるため

+0

サーバフォールトに属します。 –

答えて

2

cronは非常に最小限の環境でスクリプトを実行します。特に、そのPATHには通常のバイナリディレクトリのすべて(/ usr/binと/ bin)のみが含まれているわけではないので、他のバイナリディレクトリ(wgetなど)のコマンドは利用できません。

これを解決するにはいくつかの方法があります。 1つのオプションは、スクリプトがwgetのの完全なパスを与えることです。

#!/bin/sh 
/usr/local/bin/wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/' 

(またはその実際のパスが何であれ - を見つけるためにwhich wgetを使用しています。)

もう一つは、明示的にスクリプトでPATHを設定することです:

#!/bin/sh 
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
wget -r -l3 --no-parent -nc -A ".shtml" 'http://some.url/somethingelse/' 

(またはものは何でもあなたが通常使用するPATH;それはwgetのの場所を含んでいることを確認してください。)

またはあなたのcrontabでPATHを設定することができます。

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
00 16 * * * /Users/myusername/script.sh 
04 16 * * * /Users/myusername/crontest.sh 
+0

ありがとう!最初の方法は正常に動作します。私はまったく目が見えませんか?これはcronチュートリアル/ FAQでめったに言及されていませんか? – ssulger

+0

[cron faqのトップグーグルヒット](http://216.147.18.102/unixfaq/cron。shtml)は、この問題をトラブルシューティングのセクションで(他の一般的な問題と一緒に)言及していますが、それは私が見ているページの唯一のものです。 cronのエントリを設定する際にはかなり一般的な問題であるため、おそらくこれはもっと広く文書化されているはずです。 –

+0

ありがとうございます。私はこれで1週間以上苦労していた。 –

0

申し訳ありません:フラグを実行し、アクセス権は両方のスクリプトで同じように設定されていますか?

+0

はい、それらは同じ設定に設定されており、両方とも実行可能なスクリプトです。 – ssulger

+0

そして、shell.shまたはそれに含まれるwgetコマンドでscript.shを実行しましたか? – Martin

+0

スクリプトに含まれるスクリプトとwgetコマンドの両方をテストしました。どちらもクーロンの外でうまく動作します。 – ssulger

0

また、跳躍を開始することを検討してください。長い間、Unixの長年の人として、私は最初は厄介なほど複雑なものを見つけましたが、今ではそれを使っているので、豊富な機能が信頼できるOLより優れていることがわかります。

関連する問題