如何使用 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 bob
或sudo 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 命令的主要内容,如果未能解决你的问题,请参考以下文章
alpine linux中如何使用crontab执行定时任务