【问题标题】:How to execute a Symfony command as cron job?如何将 Symfony 命令作为 cron 作业执行?
【发布时间】:2025-12-18 05:20:06
【问题描述】:

我在 symfony 中有这个简单的命令:

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class AuctionEndCommand extends Command
{
protected function configure()
{
    error_log(print_r('test',true), 3, "/tmp/error.log");

    $this->setName('desktop:auction_end')->setDescription('Execute when auction is end.')->setHelp("Identify winners for auctions");
}
protected function execute(InputInterface $input, OutputInterface $output)
{

    // outputs multiple lines to the console (adding "\n" at the end of each line)
    $output->writeln([
        'User Creator',
        '============',
        '',
    ]);

    // outputs a message followed by a "\n"
    $output->writeln('Whoa!');

    // outputs a message without adding a "\n" at the end of the line
    $output->write('You are about to ');
    $output->write('create a user.');
}
}

现在当我执行:/var/www/myProject/bin/console desktop:auction_end 这个命令工作正常。但是当我尝试在 linux 中作为 cron 执行时,这个脚本不会启动:

在 linux 中作为 sudo 我做了: nano crontab -e 和 cron :

* * * * * /usr/bin/php /var/www/myProject/bin/console desktop:auction_end > /dev/null

我做错了什么,你能帮帮我吗?提前谢谢,对不起我的英语

【问题讨论】:

  • 你用的是什么linux发行版/
  • Ubuntu 14.04.3 LTS
  • Cron 作业有 /usr/bin/php 而常规命令没有:-?
  • sudo crontab -e -u www-data 将任务配置为 www-data 用户。这可以防止文件权限错误。如果是生产环境,我会用 --env=prod 指定环境。

标签: php linux cron symfony


【解决方案1】:

我可以保持很短。您将需要使用 PHP 来执行控制台。

* * * * * php -q /usr/bin/php /var/www/myProject/bin/console desktop:auction_end > /dev/null 

将您正在测试的 cron 作业的输出写入文件将帮助您调试错误。现在所有输出都丢失在虚空中:)

* * * * * php -q /usr/bin/php /var/www/myProject/bin/console desktop:auction_end > /home/<user>/crons/auction_end.cron.txt 

编辑

可能是您的php 应该用作绝对路径。

* * * * * /path/to/php /path/to/bin/console symfony:command

或者甚至通过指定用户来执行命令:

* * * * *  root /usr/bin/php /path/to/bin/console command:to:execute

还要确保 root 用户有权执行 symfony 项目中的文件。

【讨论】:

  • 该文件是否在您的主目录中创建?它是否包含任何输出?
  • 文件未创建
  • 'not work :(' 对我没有帮助。我需要更多信息。
  • cron 没有启动,我在/tmp/error.log没有任何日志
  • 尝试执行一个普通的 PHP 文件,看看是否可行。
【解决方案2】:

您以什么用户身份执行 cron? Symfony 需要对(取决于版本)app/cache && app/log(s) || 的写权限var/cache && var/log(s) 如果您正在执行命令的用户对您尝试写入的目录没有写入权限,那么您的操作将失败。

解决此问题的一个好方法是检查错误日志,无论是在 var/log(s) app/log(s) 中还是在 /var/log/apache2/error.log 中检查 apache2 错误日志我会猜测其中一个日志将包含对您的问题的提示。

【讨论】:

    【解决方案3】:

    如果您以 root 身份运行它,是否有效:

    * * * * * root php /var/www/myProject/bin/console desktop:auction_end > /dev/null
    

    看看这是否有效。

    【讨论】: