我的应用程序中有 2 个.php文件 - book.php 和 weather.php。我在/.openshift/cron/minutely 中创建一个名为"runscript"的文件。此文件内容:
#!/bin/bash
php -f $OPENSHIFT_REPO_DIR/weather.php
这个脚本每分钟给我发消息到手机,没关系。然后我替换为:
php -f $OPENSHIFT_REPO_DIR/book.php
这个脚本也必须给我发消息,但没有什么是快乐的。但是,如果我只是通过我的网络浏览器运行此脚本(转到 http://xxx-xxxxxxx.rhcloud.com/book.php),所以我收到了我的消息。怎么可能?魔法?
你错过了#!/bin/bash
部分吗?这是运行 shell 脚本所必需的。
有关您的 cron 作业未执行的原因,请检查 OpenShift 上的 cron 日志。当你通过SSH进入你的装备时,你可以在~/app-root/logs/cron_*.log
找到它们。
确保你的 cron 作业可以用 chmod
执行,并且像@gnaanaa所说的那样有 shebang 线。还要检查您是否有.openshift/cron/minutely/jobs.{allow,deny}
文件之一,因为它们可能会导致 cron 跳过您的作业。(有关更多信息,请参阅 cron 自述文件。
在您的 cron 作业工作后,您可以摆脱包装脚本runscript
并让 cron 直接调用book.php
。为此,请将book.php
直接放入.openshift/cron/minutely
中,使其可执行,并将此 shebang 添加到其中:
#!/usr/bin/env php
希望这有帮助。
我也使用 openshift 并执行了一个带有 cron 的 php 文件。
#!/bin/bash
php ${OPENSHIFT_REPO_DIR}index.php
这将在第一眼看到时正常执行脚本。但是没有产生任何产出。问题是,无法加载所有必需的 php 文件,因为工作目录与 Web 服务器加载时不同。在 php 脚本本身中设置工作 directoy 将防止此错误,并使脚本完全可由 cron 执行。
这应该可以帮助一些人运行他们的脚本。