将wget输出管道到cron中的/ dev / null


38

我每5分钟在crontab中运行以下命令以使Phusion Passenger保持活动状态。

*/5 * * * * wget mysite.com > /dev/null 2>&1

当我运行此命令时,它将在站点URL路由STDOUT / STDERR到/ dev / null上执行wget。当我从命令行运行此程序时,它工作正常,并且在主目录中未生成index.html文件。

从cron运行时,它每五分钟创建一个新的index.html文件,这给我留下了很多我不想要的索引文件。

我的语法对于运行cron作业不正确吗?从命令行可以正常工作,但是从cron可以在我的主目录中生成index.html文件。

我确信我犯了一个简单的错误,如果有人可以帮忙,我将不胜感激。


1
另一个问题是,当您从命令行手动运行文件时,为什么它没有创建文件。据我从文档中了解到的,wget从终端运行与其他运行之间的唯一区别是是否显示进度条。
Barmar 2014年

Answers:


61

您可以这样做:

*/5 * * * * wget -O /dev/null -o /dev/null example.com

此处-O将下载的文件发送到/dev/null-o登录,/dev/null而不是stderr。这样根本就不需要重定向。


1
谢谢,这比重定向到STDERR / STDOUT更直接。我很感激。
nulltek

17

您需要实际下载内容还是只收到200 OK?如果只需要服务器处理请求,为什么不简单使用--spider参数呢?


好主意。我真的只需要200 OK响应。
nulltek

我希望有人能公正地指出这一点,但是...您最终使用了哪种解决方案?我的回答确实是执行此操作的正确方法:)
Nacht-恢复莫妮卡2014年

10

我将使用以下内容:

/5 * * * * wget -O - mysite.com > /dev/null 2>&1

-O -选项确保将获取的内容发送到stdout。


4
注意,foo > /dev/null 2>&1更简洁地写为foo &> /dev/null
合金2014年

3
@amalloy仅在中bash。在sh通常是cron使用的中,&重定向不起作用。
Soviero 2014年

5

您说您只需要在评论中输入“ 200 OK”即可。

相对于,它提供了一些其他优势的解决方案
wget -O /dev/null -o /dev/null example.com。这个想法不是以某种方式丢弃输出,而是根本不创建任何输出。

您只需要响应就意味着不需要首先下载下载到本地文件index.html中的数据。
在HTTP协议中,命令“ GET”用于下载文档。为了以一种除了实际下载文档以外的所有方式访问文档,有一个特殊的命令“ HEAD”。
使用“ GET”执行此任务时,将在本地下载并丢弃该文档。使用“ HEAD”即可满足您的需求,而不会首先转移文档。根据定义,它将始终返回与“ GET”相同的结果代码。

使用该方法的语法HEADwget有点奇怪:我们需要使用的选项--spider。在这种情况下,它可以满足我们的要求-使用“ HEAD”(而不是“ GET”)访问URL。
我们可以使用选项-q(安静)使之wget不输出有关其功能的详细信息。

结合起来,wget既不会输出任何内容到stderr,也不会保存文档。

wget -q --spider 'http://example.com/'

退出代码告诉我们请求是否成功:

$ wget -q --spider 'http://example.com/'
$ echo $?
0
$ wget -q --spider 'http://example.com/nonexisting'
$ echo $?                                          
8

对于中的命令crontab,在两种情况下都没有输出,这意味着您可以使用没有输出来再次指示错误。

您的示例命令将更改为:

*/5 * * * * wget -q --spider mysite.com

这具有与相同的优点wget -O /dev/null -o /dev/null example.com。另一个好处是,不会生成日志输出和文档输出,而是在本地生成和丢弃。或者当然最大的区别是避免下载然后丢弃文件index.html


我也喜欢这种方法。感谢您的反馈和答复。
nulltek

3

使Phusion Passenger保持生命。

该网页说,也许您的问题应该与此有关:

快速,强大的Web服务器和应用程序服务器,用于

这不需要任何keepalive脚本。

否则,卡巴斯德的解决方案是完美的。


感谢您的反馈,尽管它不是很有建设性的。应用服务器确实会发生故障-尽管通常这不是容器的故障。
Felix Frank

1
我同意它不需要任何cronjobs来保持它的生命。但这是我研究Nginx / Passenger调整时的快速解决方案。真的只是在寻找输出到/ dev / null的最佳方法。在没有负载的情况下,我的乘客一次失败或挂了2分钟,因此请求url可以让乘客暂时开火。
nulltek

1
最好了解这些wget命令使它们保持活动状态。在许多情况下,需要保持活动消息是潜在的设计缺陷的征兆,应修复该缺陷。但是,即使所有这些问题都已解决,但仍然存在少数情况,其中保持活动消息是正确的解决方案。即使不需要保持活动消息,cron作业仍可能是监视设置的有用部分。
kasperd 2014年

作为评论,比回答更好。
moopet,2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.