2012-01-25 8 views
0

シェルスクリプトの初心者です。私はこれを介して作業しようとしています。シェルスクリプトからスクリプトを呼び出す - 取得コマンドが見つかりません

> script to execute in cron (util.sh) 
#!/bin/sh 
HOST='ahostname' 
PORT='3306' 
USER='auser' 
PASS='apassword' 
DB='adatabase' 
. /mnt/stor/backups/backup.sh 

(私もソース/mnt/stor/backups/backup.shを試してみました)

backup.shが(それが呼び出されるん)と呼ばれる
> script to execute (backup.sh) 

単に解析されているように見えるとはありません実行される。だから私はそれに入れどのように関係なく、私のようなメッセージが出ます:

/mnt/stor/backups/backup.sh: line 8: date: command not found 
/mnt/stor/backups/backup.sh: line 8: mysqldump: command not found 
/mnt/stor/backups/backup.sh: line 8: tar: command not found 
/mnt/stor/backups/backup.sh: line 8: rm: command not found 

をアイデアは、ドメインローカライズされたファイルを持っている変数とそれを実行し、汚い仕事をするために変数を使用するマスタースクリプトを呼び出すことです。私のホストと複数のドメインには限界があるため、これが最良の方法です。

+1

を使用しています。コマンドに絶対パスを追加してみてください。 '/ bin/rm'、'/bin/tar'など... –

+0

'PATH'がcronのコマンドに正しく設定されていないように見えます。その場合、コマンド(日付、tarなど)に絶対パス名を使用するか、またはbackup.shに 'PATH'を設定すると役立ちます。 –

+0

なぜ* perl *というタグが付けられていますか? – Quentin

答えて

1

問題のあるスクリプトは/mnt/stor/backups/backup.shのようです。スクリプトがそのツールを見つけられるように、バイナリにすべての通常のディレクトリを含めるようにPATHを設定してみてください。あるいは、より良い方法として、/mnt/stor/backups/backup.shを変更し、'rm'の代わりに/bin/rmのようなコマンドで絶対パスを使用してください。

+0

パスはミスインでした、ありがとう。 – chrisrth

1

cronから実行する場合、ログインシェルのプロファイルに通常ある変数(PATH、CLASSPATHなど)には依存できません。必要なものを明示的に設定する必要があります。あなたのケースでは、私はあなたの問題を引き起こしているPATH変数がないことを推測しています。

無人スクリプトから実行しているプログラムにフルパスを入れることも、実際にその特定のコマンドを実行する、つまりパスに依存しないようにすることをお勧めします。例えば

ので、代わりの

date 

、ほとんどのサブシェルが親シェルよりもはるかに異なるパスを持っている

/bin/date 

など

関連する問題