cron 中的 wget:仅在未遇到错误/文件不为空时才写入系统

cron 中的 wget:仅在未遇到错误/文件不为空时才写入系统

我有以下 crontab 来每天上午 9 点提取在线资源并将其写入本地文件:

0 9 * * * /usr/bin/wget --http-user=username --http-password=password https://remote_file_to_pull.json -O /local_output_file.json >/dev/null 2>&1

问题是,有时在检索远程文件时,服务器会抛出错误 500。所做wget的就是覆盖一个空文件。

有没有办法将 更改cron为仅在wget未遇到错误和/或要写入的文件不为空的情况下写入文件?

谢谢!

答案1

将您的 crontab 条目替换为对此脚本的引用,该脚本仅在成功时更新输出wget 它返回一个非零长度的文件

#!/bin/bash
#
url='https://remote_file_to_pull.json'
user='username'
pass='password'

target='/local_output_file.json'

if wget --quiet --http-user="$user"--http-password="$pass" -O "$target.tmp" "$url" && [[ -s "$target.tmp" ]]
then
    # Success
    mv -f "$target.tmp" "$target"
else
    # Failure of some sort; you might want to report this
    :
fi
rm -f "$target.tmp"

顺便一提。我希望您的代码具有说明性,但将文件直接写入文件系统的根目录通常不是一个好习惯。

相关内容