【问题标题】:Bash Script to download ftp files用于下载 ftp 文件的 Bash 脚本
【发布时间】:2016-05-27 02:27:52
【问题描述】:

我编写了一个 bash 脚本来从 FTP 服务器下载文件。

#!/bin/bash
screen /usr/local/bin/wget ftp://user:passwd@IP:/Folder/*

当我手动运行此脚本时,它可以工作,但是当我尝试将其设置为使用 cron 作业自动执行时,它就不起作用了。

Cron:

00 17 * * * /Users/user/.Scripts/test.sh

知道为什么这不起作用吗?

我也不断收到这封邮件

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
X-Cron-Env: <HOME=/Users/user>
Date: Mon, 15 Feb 2016 19:12:00 -0600 (CST)

Must be connected to a terminal.

我刚刚尝试使用 sh,而我收到的就是那封邮件。

【问题讨论】:

  • 尝试在test.sh的绝对路径前添加sh
  • 它是否总是需要在screen 中运行?你需要在屏幕上看到输出吗?
  • 不,但我认为如果我登录并且它仍在运行我可以检查它。
  • 如果要下载到特定文件夹,只需删除screen 并在wget 中添加-O 参数,否则它可能会下载到cron 的cwd守护进程。

标签: macos bash ftp wget


【解决方案1】:

把你的脚本改成这样:

#!/bin/bash

SCREEN_OPTS=""
DOWNLOAD_DIR="."

if [[ ! -t 1 ]]; then
    SCREEN_OPTS="-d -m"
    DOWNLOAD_DIR="/path/to/save/files"
fi


screen $SCREEN_OPTS /usr/local/bin/wget --directory-prefix="$DOWNLOAD_DIR" ftp://user:passwd@IP:/Folder/*

这样,如果从cron 运行,screen 将以分离模式运行,并且不需要终端。

如果脚本从终端运行,[[ -t 1 ]] 测试表达式将返回 true (0)。

您还需要为wget 指定一个输出目录,否则它只会保存到cron 的工作目录中。

【讨论】:

  • 我不得不稍微修改一下。我不得不将 --directory-prefix 部分放在 wget 之后。感谢您的帮助。现在可以使用了。
  • 没问题,很高兴为您提供帮助。哎呀,你是对的,我解决了这个问题。只是最后一分钟的疏忽:)
  • 它正在下载带有其他文件路径的html文件。我想从一个文件夹下载多个文件
猜你喜欢
  • 2012-04-23
  • 2010-11-29
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 2015-06-16
相关资源
最近更新 更多