![如何通过 WGET Cronjob 定期保存网页](https://linux22.com/image/1146926/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20WGET%20Cronjob%20%E5%AE%9A%E6%9C%9F%E4%BF%9D%E5%AD%98%E7%BD%91%E9%A1%B5.png)
我有一台 Ubuntu 16.04.2 LTS 云服务器,24/7 全天候在线。这台服务器上有很多 cronjob 在运行。有一个新闻网站,我想每 20 分钟保存一次带有时间戳的封面版本。我创建了一个 WGET 语句,它可以从命令行完美运行。
wget --convert-links --output-document=/home/username/News-Headlines-$(date +%Y-%m-%d_%H:%M:%S).html news.tld
*/20 * * * * /usr/bin/wget --convert-links --output-document=/home/username/News-Headlines-$(date +%Y-%m-%d_%H:%M:%S).html news.tld
当从根 cronjob 运行此语句时,不会创建文件,并且 /var/log/syslog 中不会产生任何错误
如何使这个 WGET root cronjob 语句起作用?
跟进:
cron 开始发送邮件错误:/bin/sh:1:语法错误:文件结尾意外(预期“)”)
根 crontab 文件末尾确实有一个空行。这个错误指的是什么?
答案1
发现的问题 % 符号未被转义。
这篇文章中提出了以下建议: https://serverfault.com/questions/449651/why-is-my-crontab-not-working-and-how-can-i-troubleshoot-it
“在命令中使用百分号 (%) 时要非常小心。除非它们是转义的 \%,否则它们将被转换为换行符,并且第一个非转义的 % 之后的所有内容都将通过 stdin 传递给您的命令。”
一旦日期语句中的 % 被转义 \%,就会按预期创建带有时间戳的文件。
*/20 * * * * /usr/bin/wget --convert-links --output-document=/home/username/News-Headlines-$(date +\%Y-\%m-\%d_\%H:\%M:\%S).html news.tld