Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么这个ftp get命令在我的shell脚本中工作,但在cron中失败_Linux_Shell_Ftp_Get_Cron - Fatal编程技术网

Linux 为什么这个ftp get命令在我的shell脚本中工作,但在cron中失败

Linux 为什么这个ftp get命令在我的shell脚本中工作,但在cron中失败,linux,shell,ftp,get,cron,Linux,Shell,Ftp,Get,Cron,我有一个shell脚本,可以作为特定用户运行,从服务器获取文件。我想在特定的时间运行它。当我以该用户的身份使用以下命令手动运行它时,它会工作: sudo -H -u myUser bash -c /absolute/path/to/my/script/myScript.sh 我想在general cron中以该用户的身份运行脚本,因此我将该行添加到/etc/crontab中,该行也可以工作: 16 10 * * * myUser /absolute/path/to/my/script/

我有一个shell脚本,可以作为特定用户运行,从服务器获取文件。我想在特定的时间运行它。当我以该用户的身份使用以下命令手动运行它时,它会工作:

sudo -H -u myUser bash -c /absolute/path/to/my/script/myScript.sh
我想在general cron中以该用户的身份运行脚本,因此我将该行添加到/etc/crontab中,该行也可以工作:

16 10   * * *   myUser /absolute/path/to/my/script/myScript.sh >> /tmp/logOfMyScript.sh.txt
该脚本本身是一个基本(我指的是基本!)ftp脚本,在我运行该脚本时可以正常工作:

#!/bin/bash
filename="myBinaryFile.dta"
hostname="ftp.mydomain.com"
username="myusername"
password="mypassword"
ftp -ivn $hostname <<EOF
quote USER $username
quote PASS $password
binary
get $filename
quit
EOF
比较手动运行脚本的日志和cron的输出,cron输出中缺少以下几行

200 PORT command successful
150-Connecting to port 39317
150 1161.4 kbytes to download
226-File successfully transferred
226 2.476 seconds (measured here), 469.07 Kbytes per second
1189253 bytes received in 2.63 secs (442.0 kB/s)
最糟糕的是最后一句话

再见。您上载了0并下载了0 KB。


有人知道为什么在cron中不调用端口吗?是否有需要设置的变量。端口是普通端口,在cron脚本的日志中显示为良好。

您最好不要对任何内容使用
ftp
,尤其是非交互式使用
wget
可以通过ftp以可靠、灵活和可预测的方式下载文件:

wget --user="userName" --password="userPassword" \
    "ftp://ftp.myDomain.com/myBinaryFile.dta"

为什么不直接使用
wget
instead我尝试了wget,但是没有用,或者我不知道如何指定文件的路径,因为03 17***myUser wget--user=“userName”-password=“userPassword”ftp.myDomain.com/myBinaryFile.dta从未找到它,例如
wget--user=“userName”--password=“userPassword”ftp://ftp.myDomain.com/myBinaryFile.dta“
请确保先在终端中试用,并将stdout和stderr重定向到一个日志文件,这样您就可以通过添加
/tmp/mylog 2>&1查看cron输出了
我按照您所说的那样更改了命令:wget--ftp user=myUserName--ftp password=myPassword ftp.myDomain.com/myBinaryFile.dta>/tmp/mylog.txt 2>&1。。。在调用该命令时创建的可视化输出中,显示“Resolving ftp.myDomain.com(ftp.myDomain.com)…1.2.3.4连接到ftp.myDomain.com(ftp.myDomain.com)| 1.2.3.4 |:80…已连接”。但在日志中显示:“Resolving ftp.myDomain.com(ftp.myDomain.com)…失败:名称或服务未知。wget:无法解析主机地址“ftp.myDomain.com”。为什么它会显示
:80而不是
:21
?您添加了
ftp://
,对吗?
wget --user="userName" --password="userPassword" \
    "ftp://ftp.myDomain.com/myBinaryFile.dta"