如何使用crontab执行Symfony命令

3

我发现了两个类似的问题,但是它们并没有对我有所帮助。

我有一个Symfony命令,在输入以下内容时它可以正常工作:

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

我尝试使用sudo crontab -e创建一个将每分钟运行一次的定时任务:

MAILTO=""

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

但这并没有起作用,我也找不到任何错误信息。sudo grep CRON /var/log/syslog 的结果如下:

Apr 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致命错误:Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException:尝试从命名空间"Sensio\Bundle\Gene$中加载类"SensioGeneratorBundle"。您是否忘记了另一个命名空间的"use"语句?在/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中,这样您就可以收到错误通知了。 - aynber
2
将命令的输出(stdout/stderr)导入日志文件中:....bin/console app:slack >> logfile.log 2>&1 - JustOnUnderMillions
我用以下代码解决了这个问题:* * * * * export SYMFONY_ENV=prod && /usr/bin/php /home/bob/example_project/bin/console app:slack。是否有更好的方法或者这样就可以了? - twharmon
也许你在AppKernel.php中打错了字。我不喜欢你的日志文件中的这一部分"Sensio\Bundle\Gene$。敬礼。 - Viktor
1个回答

6

出现了一个环境问题。以下方法可以解决:

SYMFONY_ENV=prod

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

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

正如评论中提到的,这也是可行的:

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

2
或者只需在终端输入以下命令:php /home/bob/example_project/bin/console app:slack -e prod - striker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接