我在我的 crontab 中每 5 分钟运行一次以下命令,以保持 Phusion Passenger 活着。
*/5 * * * * wget mysite.com > /dev/null 2>&1
当我运行它时,它会在站点 url 上执行 wget,将 STDOUT/STDERR 路由到 /dev/null。当我从命令行运行它时,它工作正常并且不会在我的主目录中生成 index.html 文件。
当它从 cron 运行时,它每五分钟创建一个新的 index.html 文件,给我留下大量我不想要的索引文件。
我的语法对于运行 cron 作业是否不正确?从命令行它可以正常工作,但从 cron 它会在我的主目录中生成一个 index.html 文件。
我确定我犯了一个简单的错误,如果有人可以提供帮助,将不胜感激。
你可以这样做:
这里
-O
将下载的文件发送到/dev/null
并-o
记录到/dev/null
而不是 stderr。这种方式根本不需要重定向。您需要实际下载内容还是只收到 200 OK?如果您只需要让服务器处理请求,为什么不简单地使用
--spider
参数呢?我会使用以下内容:
该
-O -
选项确保将获取的内容发送到标准输出。您说您只需要在评论中回复“200 OK”。
这允许解决方案比
wget -O /dev/null -o /dev/null example.com
. 这个想法不是以某种方式丢弃输出,而是根本不创建任何输出。您只需要响应意味着下载到本地文件 index.html 中的数据首先不需要下载。
在 HTTP 协议中,“GET”命令用于下载文档。要以除了实际下载文档之外的所有方式访问文档,有一个特殊的命令“HEAD”。
当使用 'GET' 完成此任务时,文档会在本地下载并丢弃。使用“HEAD”可以满足您的需要,它不会首先传输文档。根据定义,它总是会返回与“GET”相同的结果代码。
使用该方法的语法
HEAD
有点奇怪wget
:我们需要使用 option--spider
。在这种情况下,它只是做我们想做的事——使用“HEAD”而不是“GET”访问 URL。我们可以使用选项
-q
(quiet)wget
不输出有关其功能的详细信息。结合它,
wget
既不会向 stderr 输出任何内容,也不会保存文档。wget -q --spider 'http://example.com/'
退出代码告诉我们请求是否成功:
对于 中的命令
crontab
,在这两种情况下都没有输出的事实意味着您可以再次使用没有输出作为错误指示。您的示例命令将更改为:
这与 具有相同的优点
wget -O /dev/null -o /dev/null example.com
。另一个优点是日志输出和文档输出不会生成,而是在本地生成和丢弃。或者当然最大的区别是避免下载然后丢弃文件,index.html
.可能你的问题应该是关于这个的,网页上说:
这不应该需要任何保活脚本。
否则,kasperd 的解决方案是完美的。