【问题标题】:CRON job on OPENSHIFT PaaSOPENSHIFT PaaS 上的 CRON 作业
【发布时间】:2016-05-27 12:36:22
【问题描述】:

所以我想定期在我的应用程序中运行一个脚本,该脚本在我在 openshift PaaS 上运行。我想定期从我的数据库中删除一些条目。 我已经安装了 CRON 墨盒,并放置了一个 bash 脚本,如下所示:

#!/bin/bash

php /erase.php

在 .openshift/cron/minutely 中,它应该每分钟运行一个脚本。我把erase.php放在我的git存储库的根文件夹中,所以我认为上面的代码没有错误。 我的 erase.php 看起来像这样:

<?php
try {
        $bdd = new PDO('mysql:host=127.*.***.*:****;dbname=track', '****', '*****');
    } catch(Exception $e) {
        exit('Unable to connect to db.');
    }

    $sql = "DELETE FROM table";
    $q = $bdd->prepare($sql);
    $q->execute();

?>

据我所知,上面的代码没有任何问题。我还有什么遗漏的吗?

编辑: 问题解决了,在 bash 脚本中路径必须是这样的: php $OPENSHIFT_REPO_DIR/erase.php

【问题讨论】:

  • 那么使用这段代码会发生什么?
  • 1.此代码中无需使用准备好的语句。 2. 为什么不尝试在这段代码中添加一些错误处理和日志记录?
  • 喜欢计数或任何消息?
  • 我真的不知道怎么做。我的意思是,如果我自己运行这个 php 脚本,它可以正常工作。对于 bash 脚本,我不知道如何添加错误处理以及究竟是为了什么?
  • cron 脚本是否可执行?

标签: php mysql git cron openshift


【解决方案1】:

bash 脚本中的绝对路径似乎不正确。您的 repo 目录不是根目录。您可以使用 environment variables 指定 bash 脚本的绝对路径。由于erase.php 位于您的存储库的根目录中,因此:

php $OPENSHIFT_REPO_DIR/erase.php

如果您需要对作业本身进行故障排除,您应该会在 ~/app-root/logs/cron_minutely.log 中看到 minutely cron 作业的错误日志,在 sshing into your app 之后。

如果 cron 作业似乎根本没有运行,请确保您已将 Cron add-on cartridge 添加到您的应用中,并且您的 bash 脚本文件是可执行的,如 cmets 中所建议的那样。

【讨论】:

  • 感谢您的回答,将应用更改并报告。但是我真的需要自己让它可执行吗?那么SSH并手动编译它?现在我只有 .sh 在 minutely 文件夹中。在 openshift 关于 CRON 作业的说明中,它没有说明任何关于手动编译的内容。
  • 是的,问题出在路径上。没有必要使脚本可执行,因为看起来 openshift 会为您执行此操作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2015-01-21
  • 2018-03-22
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多