2017-06-08 70 views
0

我有shell腳本從一個服務器上的文件FTP到名爲abc.sh下面的另一個服務器裏面shell腳本手動而不是運行在crontab中

#!/bin/bash 

HOST='10.18.11.168' 
USER='india' 
PASS='[email protected]' 
FILE='inload.dat' 
DIRECTORY='/inloading' 


ftp -n $HOST <<END_SCRIPT 
user $USER $PASS 
cd $DIRECTORY 
put $FILE 
quit 
END_SCRIPT 
exit 0 

我能夠使用運行它的代碼。 /abc.sh文件也被複制到遠程服務器。

但是,當我在crontab中使用它不能ftp文件下面 是crontab條目

15 01 * * * /user/loader/abc.sh > /user/loader/error.log 2>&1 

在它顯示爲local: inload.dat: No such file or directory

+0

您是否手動檢查該文件是否存在? –

+0

是文件存在 – Hara

回答

0

您的本地路徑可能不是您想要的。在執行ftp命令之前,將cd添加到文件所在的目錄。或者具有文件$ FILE的完整路徑名稱。

+0

這只是一個更適合作爲評論的建議。一個好的答案將包括具體的指示,原始的海報和其他人絆倒這個職位可以直接使用。 –

+0

「將cd添加到文件所在的目錄」是一個非常具體的指令。 – JeffUK

+0

在FTP現在正常工作之前在目錄中添加了一個cd,謝謝大家的建議。 – Hara

1

你引用文件inload.dat error.log中,這是相對於目錄該腳本從運行。當您運行腳本./abc.sh時,它會在同一個目錄中查找inload.dat

的Cron選擇哪個目錄從當它執行(IIRC一般默認爲/root或您的HOME目錄,但具體位置並不重要)運行腳本,它不是necesarily你所在的同一個目錄當你運行./abc.sh

正確的解決方案是使FILE和絕對路徑到達inload.dat的完整位置,以便您的腳本不再依賴於從某個目錄運行才能成功。

還有其他選項,例如動態determining the directory the script lives in,但是使用絕對路徑通常是更好的選擇。

+0

如果要上傳多個文件,另一個可能方便的解決方案是使用'lcd' ftp命令。 –

+0

嗨dimo414我試圖在abc.sh中給FILE ='/ user/loader/inload.dat',現在仍然沒有複製錯誤error.log爲'/user/loader/inload.dat':無法寫入。 – Hara

+0

這聽起來像是一個不同的問題。你已經修復了原來的錯誤,現在進入下一個錯誤! 「不能寫」通常表示權限問題,但沒有更多的上下文,我不能肯定地說。我建議嘗試進一步調試,然後發佈一個新問題。 – dimo414

相關問題