如何使用 crontab 执行 Symfony 命令

Posted

技术标签:

【中文标题】如何使用 crontab 执行 Symfony 命令【英文标题】:How to use crontab to execute a Symfony command 【发布时间】:2017-09-05 13:41:54 【问题描述】:

我发现了两个类似的问题,但没有得到帮助。

我有一个 Symfony 命令在我输入时正在工作:

/usr/bin/php /home/bob/example_project/bin/console app:slack

我尝试使用sudo crontab -e 制作一个 crontab(每分钟运行一次):

MAILTO=""

* * * * * /usr/bin/php /home/bob/example_project/bin/console app:slack

但它不起作用。我也找不到任何错误消息。 sudo grep CRON /var/log/syslog 给:

4 月 10 日 13:21:01 example_project CRON[23432]: (root) CMD (/usr/bin/php /home/bob/example_project/bin/console app:slack)

使用sudo crontab -e -u bobsudo crontab -e -u www-data 不会改变任何东西。

我做错了什么?

编辑 logfile.log 有这个:

PHP 致命错误:未捕获 Symfony\Component\Debug\Exception\ClassNotFoundException:试图 从命名空间“Sensio\Bundle\Gene$”加载类“SensioGeneratorBundle” 您是否忘记了另一个名称空间的“使用”语句?在 /home/bob/example_project/app/AppKernel.php:25 堆栈跟踪: 0 /home/bob/example_project/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php(403): AppKernel->registerBundles() 1 /home/bob/example_project/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php(113): Symfony\Component\HttpKernel\Kernel->initializeBundles() 2 /home/bob/example_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php(68): Symfony\Component\HttpKernel\Kernel->boot() 3 /home/bob/example_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(120): Symfony\Bundle\FrameworkBundle\Console\Application->doRun(Object(Sy$ 4 /home/bob/example_project/bin/console(28): S in /home/bob/example_project/app/AppKernel.php on line 25

【问题讨论】:

根据您的日志,它看起来运行正常。尝试登录您的命令以验证一切是否正常运行。也许它在某个地方遇到了错误。还可以尝试将您的电子邮件地址添加到您的 crontab 中的 MAILTO,以便您收到错误通知。 将命令的输出(stdout/stderr)通过管道传输到日志文件....bin/console app:slack >> logfile.log 2>&1 我修复了它:* * * * * export SYMFONY_ENV=prod && /usr/bin/php /home/bob/example_project/bin/console app:slack。有没有更好的方法或者这样可以吗? 也许您在AppKernel.php 中有错字。我不喜欢你日志文件的这部分```“Sensio\Bundle\Gene$`”。问候。 【参考方案1】:

存在环境问题。这修复了它:

SYMFONY_ENV=prod

* * * * * php /home/bob/example_project/bin/console app:slack

不需要 php 的完整路径,/usr/bin/php

如 cmets 中所述,这也有效:

* * * * * php /home/bob/example_project/bin/console app:slack -e prod

【讨论】:

或者只是 * * * * * php /home/bob/example_project/bin/console app:slack -e prod

以上是关于如何使用 crontab 执行 Symfony 命令的主要内容,如果未能解决你的问题,请参考以下文章

lunux定时任务

linux 定时执行shell

如何让linux定时任务crontab按秒执行

alpine linux中如何使用crontab执行定时任务

alpine linux中如何使用crontab执行定时任务

如何使用Linux的Crontab定时执行PHP脚本的方法