我有一个shell脚本将一个文件从一个服务器FTP到一个名为abc.sh的服务器下面是其中的代码
RemoveDllDirectory
我可以使用./abc.sh运行它,文件也会被复制到远程服务器。
但是当我在crontab中使用时,它不是ftp文件 下面是crontab条目
#!/bin/bash
HOST='10.18.11.168'
USER='india'
PASS='India@2017'
FILE='inload.dat'
DIRECTORY='/inloading'
ftp -n $HOST <<END_SCRIPT
user $USER $PASS
cd $DIRECTORY
put $FILE
quit
END_SCRIPT
exit 0
错误.log中的显示为15 01 * * * /user/loader/abc.sh > /user/loader/error.log 2>&1
答案 0 :(得分:1)
您正在引用文件inload.dat
,该文件相对于目录脚本从运行。当您以./abc.sh
运行脚本时,它会在同一目录中查找inload.dat
。
Cron从执行时选择运行脚本的目录(IIRC通常默认为/root
或您的HOME
目录,但具体位置并不重要),而且&# 39;当你运行./abc.sh
时,它不一定是你所在的目录。
正确的解决方案是使FILE
和inload.dat
的完整位置的绝对路径,以便您的脚本不再依赖于从某个目录运行才能成功。
还有其他选项,例如动态determining the directory the script lives in,但简单地使用绝对路径通常是更好的选择。
答案 1 :(得分:0)
你的本地路径可能不是你想要的。在执行ftp命令之前,将cd添加到文件所在的目录中。或者拥有文件$ FILE。
的完整路径名