2012-01-25 125 views
0

我是shell腳本編程新手。我正在努力解決這個問題。從shell腳本調用腳本 - 找不到命令

> 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)

> script to execute (backup.sh) 

當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

最有可能的子shell有很多不同的路徑比母貝。嘗試爲命令添加絕對路徑,例如'/ bin/rm','/ bin/tar'等...... –

+0

看起來像'PATH'沒有正確設置cron的命令。如果是這樣的情況下,使用絕對路徑到你的命令(日期,焦油等)或設置在backup.sh一個'PATH'可能的幫助。 –

+0

爲什麼標記爲* perl *? – Quentin

回答

1

帶問題的腳本似乎是/mnt/stor/backups/backup.sh。嘗試設置PATH以包含所有通常的二進制目錄,以便腳本可以找到它的工具。或者,更好的辦法是更改/mnt/stor/backups/backup.sh並在諸如/bin/rm之類的命令中使用絕對路徑,而不僅僅是'rm'

+0

路徑是missin,謝謝。 – chrisrth

1

當從cron運行,你不能依賴於通常在登錄shell的配置文件(例如:PATH,CLASSPATH等)的任何變量。你必須明確地設置你需要的東西。在你的情況下,我猜測它是缺少導致你的麻煩的PATH變量。

也是一種很好的做法,將無路徑腳本中執行的程序的完整路徑,以確保您確實將運行該特定命令,即不依賴路徑。

所以不是

date 

例如,使用

/bin/date