【问题标题】:Laravel schedule:run is not working when added into the cron jobLaravel schedule:run 在添加到 cron 作业时不起作用
【发布时间】:2021-05-02 00:38:19
【问题描述】:

我已经制定了一个命令,并安排为每 30 分钟一次。当我运行php artisan schedule:run 时,它工作得非常好并返回预期的结果,但是当我在我的实时服务器上配置它时,我的 cron 作业确实运行了,但它没有重新调整成功消息,而是返回我的 laravel 项目中所有可用命令的列表.这就是我正在做的事情。

命令内核:

$schedule->command('update:callLogs')
            ->everyMinute();

Cron 条目:

/usr/bin/php /home/ddsas9rm2f1g/public_html/clowdlink.com/crm/artisan schedule:run

这是我得到的回应

Laravel 框架 5.8.38

Usage:
command [options] [arguments]

Options:
 -h, --help            Display this help message
 -q, --quiet           Do not output any message
 -V, --version         Display this application version
  --ansi            Force ANSI output
  --no-ansi         Disable ANSI output
 -n, --no-interaction  Do not ask any interactive question
  --env[=ENV]       The environment the command should run under
 -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
 (List of all availabe commands)

任何帮助将不胜感激。

编辑 现在我的命令看起来像这样

* * * * * cd /home/ddsas9rm2f1g/public_html/clowdlink.com/crm && php artisan update:callLogs

但得到相同的响应,而当我复制相同的命令并使用 putty 运行相同的命令时,它工作得非常好。现在已经一个星期了,我仍然坚持这个 cron 事情。

【问题讨论】:

  • 你添加了这个* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
  • 是的,我用这个命令试过了,但结果还是一样
  • 进入我的 cPanel cron 作业
  • 您的本地设置和实时设置不同,操作系统和 PHP 也不同,所以请检查一下
  • 听起来您在共享主机上运行。我可以知道你在哪里托管吗?另外我认为您的 PHP 二进制文件可能在其他地方。也许做一个phpinfo() 并找出路径,或者从你的应用程序中回显(new Symfony\Component\Process\PhpExecutableFinder)->find() 来找出答案。

标签: php laravel cron


【解决方案1】:

我在部署我的应用程序时也遇到了很大的挑战,最终设法解决了这个问题:

cd /path-to-project && /opt/cpanel/ea-php71/root/opt/cpanel/ea-php74/root/usr/bin/php-cgi artisan schedule:run

我的应用程序使用 Laravel 5.7

【讨论】:

  • 感谢您的回复。我的项目路径是从 __FILE__ 魔术函数得到的,但是第二条路径是什么,我怎样才能得到那条路径,你能帮我解决一下吗
  • 因为我现在收到的邮件是No such file or directory
  • 这里有一些东西,1)你通过“cd /path-to-project”进入你的项目根文件夹2)你指定哪个php版本用于执行artisan命令
  • cron命令行可以使用Magic函数吗?
  • 您的服务器(提供者)是否允许您通过 cronjobs 执行 php?尝试执行* * * * * cd /home/ddsas9rm2f1g/public_html/clowdlink.com/crm && /usr/bin/php testscript.php > testscriptoutput.txt 之类的操作,将 echo "hello world" 添加到该测试脚本并检查您的日志。
【解决方案2】:

你可以试试下面的代码:

* * * * * php /home/ddsas9rm2f1g/public_html/clowdlink.com/crm/artisan schedule:run 1>> /dev/null 2>&1

>> /dev/null 2>&1:我们将丢弃命令的所有输出。

【讨论】:

  • 此时 OP 不应丢弃所有输出! :-) 也许一旦它开始工作,但不是现在......
  • 它给出的输出与我在问题中提到的相同
【解决方案3】:

你可以在 cron 中尝试下面的方法并分享 crontab.out 的输出

* * * * * cd /home/ddsas9rm2f1g/public_html/clowdlink.com/crm/ && php artisan schedule:run >> crontab.out 2>&1

【讨论】:

  • 我已经尝试过这个命令,但是在我添加到我的问题中的 crontab.out 文件中得到了相同的输出。
  • @MohsinAbbas 如果你在没有 cron 的情况下运行这个命令会发生什么?您可以在上面建议的命令中替换您的本地 php 安装吗?此外,crontab 是否从您运行命令的同一用户运行?
  • 当我在没有 cron 的情况下运行此命令时,它工作得非常好,并返回预期的准确结果。我已经在命令中替换了我的本地 php,结果相同,它返回所有可用工匠命令的列表。是的,我正在使用我正在运行命令的同一用户运行 crontab
  • 不,我没有这样做。你能告诉我更多关于这个的信息吗?我该怎么做,这样做的目的是什么
  • 尝试从 crontab 运行一个简单的 artisan 命令可能会显示版本并将其输出到文件中。它将帮助您进一步调试
【解决方案4】:

我通过指定 PHP 的路径而不是仅使用 php 来解决此问题。

来自:cd /home/foobar && php artisan schedule:run

对此:cd /home/foobar && /usr/local/bin/php artisan schedule:run

这阻止了我获取可用工匠命令的列表并给了我正确的输出。

我可以看到您似乎已经尝试过,但我认为其他人也会遇到这种情况。我想您的问题与您使用的 PHP 版本无法正确运行 PHP 脚本有关。可能是 CLI 的 opcache 问题?

【讨论】:

    【解决方案5】:
    */30 * * * * php /home/ddsas9rm2f1g/public_html/clowdlink.com/crm/artisan schedule:run 1>> /dev/null 2>&1
    

    */30 * * * * /usr/bin/php /home/ddsas9rm2f1g/public_html/clowdlink.com/crm/artisan schedule:run 1>> /dev/null 2>&1
    

    */30 * * * * cd /home/ddsas9rm2f1g/public_html/clowdlink.com/crm && php artisan schedule:run >> /dev/null 2>&1
    

    另请阅读全文: https://devnote.in/how-to-set-auto-database-backup-with-cron-scheduler-in-laravel/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 2018-10-24
      • 2012-10-24
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多