Linux 为什么这个ftp get命令在我的shell脚本中工作,但在cron中失败
我有一个shell脚本,可以作为特定用户运行,从服务器获取文件。我想在特定的时间运行它。当我以该用户的身份使用以下命令手动运行它时,它会工作: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/
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"