shell脚本手动运行但不在crontab中运行

时间:2017-06-08 08:44:30

标签: linux shell cron

我有一个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

2 个答案:

答案 0 :(得分:1)

您正在引用文件inload.dat,该文件相对于目录脚本从运行。当您以./abc.sh运行脚本时,它会在同一目录中查找inload.dat

Cron从执行时选择运行脚本的目录(IIRC通常默认为/root或您的HOME目录,但具体位置并不重要),而且&# 39;当你运行./abc.sh时,它不一定是你所在的目录。

正确的解决方案是使FILEinload.dat的完整位置的绝对路径,以便您的脚本不再依赖于从某个目录运行才能成功。

还有其他选项,例如动态determining the directory the script lives in,但简单地使用绝对路径通常是更好的选择。

答案 1 :(得分:0)

你的本地路径可能不是你想要的。在执行ftp命令之前,将cd添加到文件所在的目录中。或者拥有文件$ FILE。

的完整路径名