2017-06-08 69 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

相关问题