【问题标题】:Running Shells as cronjobs将 Shell 作为 cronjobs 运行
【发布时间】:2012-10-29 07:09:36
【问题描述】:

我正在尝试研究如何设置 Shell 以作为 cron 运行,我在 /app/Console/Command/TaskEmailerShell.php 中创建了一个 TaskEmailerShell.php 文件,其中包含以下代码:

App::uses('CakeEmail', 'Network/Email');

class TaskEmailerShell extends AppShell {
    public $uses = array('Task');

    public function main()
    {
        // GENERATE AND SEND THE EMAIL
        // ------------------------------------------------------------>
        $email = new CakeEmail();
        etc etc

我已按照说明here 操作,当 cron 运行时出现此错误:

/home/village/public_html/app/Console/cakeshell: line 14: cake: command not found

我的 cron 命令是:

/home/village/public_html/app/Console/cakeshell TaskEmailer -cli /usr/bin -console /Cake/Console -app /home/village/public_html/app >> /home/village/public_html/emailer_log.log

有什么建议我哪里出错了吗?

【问题讨论】:

  • 您是否指定了代码的执行频率?
  • cakeshell 的第 14 行及其附近有什么?

标签: shell cakephp cron crontab


【解决方案1】:

您所指的cakeshell 脚本要求cake 控制台二进制文件位于PATH 中的某个位置,或者(至少从使用示例来看),以便您指定控制台的完整路径使用 -console 参数。看起来你在那里有一个相对路径。

我个人建议直接从您的 cron 作业中调用 cake 控制台。随着其他需求的出现,您最终可能会编写像cakeshell 这样的脚本来包装控制台。你可以试试这样的:

# m h dom mon dow command
*/5 *   *   *   * /home/village/public_html/lib/Cake/Console/cake -app '/home/village/public_html/app/' TaskEmailer >> /home/village/public_html/emailer_log.log

【讨论】:

    【解决方案2】:

    Command not found 通常意味着您的PATH 是问题所在。从 cron 运行的程序甚至可能没有设置 PATH。任何由 cron 启动的脚本都必须在开头附近设置 PATH 否则它将找不到任何它应该运行的程序。

    【讨论】:

      【解决方案3】:

      错误发生在 cakeshell 文件的第 14 行:$cmd. cmd 设置在第 4 行。

      #!/bin/bash
      TERM=dumb
      export TERM
      cmd="/opt/lampp/htdocs/MyApp/app/Console/cake"
      while [ $# -ne 0 ]; do
      if [ "$1" = "-cli" ] || [ "$1" = "-console" ]; then
      PATH=$PATH:$2
      shift
      else
      cmd="${cmd} $1"
      fi
      shift
      done
      $cmd
      

      原来第4行是

      cmd="cake"
      

      将其更改为绝对路径,例如:

      cmd="/opt/lampp/htdocs/MyApp/app/Console/cake"
      

      其中 MyApp 是应用程序目录。即使在 PATH 设置之后,我也遇到了这个问题。然后提到绝对路径就解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        相关资源
        最近更新 更多