【问题标题】:PHP Script as Cron doesn't work, but does from CLI作为 Cron 的 PHP 脚本不起作用,但在 CLI 中起作用
【发布时间】:2011-12-23 19:36:39
【问题描述】:

我有一个触发一些 magento 操作的 php 脚本,我将其设置为以下 cron:

cd /home/dir/public_html; php -f file.php;

这会启动脚本,但是由于某种原因它没有完成执行,cron 以用户“user”身份运行,当我以 root 身份从终端运行命令时,它运行良好。但是,它使用的所有文件都归用户所有。我认为这是路径的问题,这就是为什么我将 CD 命令添加到它的前面,但事实并非如此。

我认为这可能是创建锁定文件的问题,我让它创建一个锁定文件,运行脚本,然后删除锁定文件以防止它运行(如果它已经运行)。锁定文件已生成但从未删除,我的知识是,如果它以用户“用户”的身份创建它,那么它也应该能够以该用户的身份删除它。

有什么想法吗?非常感谢。

【问题讨论】:

  • 它可能在到达“删除锁定文件”部分之前就被炸毁了。我建议在各个阶段添加一些调试输出。 “做这个”、“做那个”、“尝试做某事”等等……
  • 您可以通过终端命令行以“用户”身份创建/删除锁定文件吗?
  • 我想您可能已经发现了问题,“用户”没有外壳访问权限。嗯,这是一个愚蠢的问题。

标签: php linux magento cron


【解决方案1】:

不要从 cronjob 中调用 php,而是调用一个正在调用 php 文件的 shell 脚本。

然后您可以更改脚本运行的环境而无需更改 cronjob,并且您可以更轻松地测试 cron 命令(因为您可以调用 shell 脚本)。

然后,您可以在 shell 脚本中更改 php-script 预期所在的目录,这肯定会解决您的问题。

此外,您可以更改 ini 指令、处理日志记录和 shell 错误处理,例如将 STDERR 管道传输到文件等。

这不完全是您的问题,但此问题中提供的信息可能会解决您的问题:How can I force PHP Version for Command Line?

【讨论】:

    【解决方案2】:

    尽量把PHP的全路径,或者在crontab的第一行定义PATH变量:

    PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/sbin:/usr/sbin
    

    编辑:此外,您可以像这样记录您的脚本:

    * * * * * cd /home/dir/public_html; /usr/bin/php -f file.php; &>/tmp/file.log
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2016-11-12
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多