【发布时间】:2015-06-24 15:43:14
【问题描述】:
我有一个 shell 脚本,我可以作为某个用户运行它以从服务器获取文件。我想在特定时间运行它。当我使用命令以该用户身份手动运行它时,它可以工作:
sudo -H -u myUser bash -c /absolute/path/to/my/script/myScript.sh
我想在一般 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
当我使用命令(上)手动运行它时的结果是完美的:
[sudo] password for me:
Connected to myDomain.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 2 of 50 allowed.
220-Local time is now 07:55. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User myUser OK. Password required
230 OK. Current restricted directory is /
200 TYPE is now 8-bit binary
local: myBinaryFile.dta remote: MyBinaryFile.dta
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)
221-Goodbye. You uploaded 0 and downloaded 1162 kbytes.
221 Logout.
比较我手动运行脚本的日志和 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)
最糟糕的是最后一行说
221-再见。您上传了 0 字节,下载了 0 KB。
有人知道为什么在 cron 中不调用端口吗?是否有需要设置的变量。端口为正常端口21,在cron脚本的日志中显示为正常。
【问题讨论】:
-
为什么不直接使用
wget -
我试过 wget 但没用,或者我不明白如何指定文件的路径,因为 03 17 * * * myUser wget --user= "userName" --password="userPassword" "ftp.myDomain.com/myBinaryFile.dta"
-
您必须指定
ftp,例如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 有趣...在调用命令时创建的视觉输出中显示“正在解析 ftp.myDomain.com (ftp.myDomain.com)... 1.2.3.4 连接到 ftp.myDomain.com (ftp.myDomain.com )|1.2.3.4|:80... 已连接。”但在日志中显示:“正在解析 ftp.myDomain.com (ftp.myDomain.com)...失败:名称或服务未知。wget: 无法解析主机地址 'ftp.myDomain.com'”
-
为什么说
:80而不是:21?你确实添加了ftp://,对吧?