我在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执行时,这个脚本无法启动:
在我作为sudo的linux中我做了:
nano crontab -e
和cron:
* * * * * /usr/bin/php /var/www/myProject/bin/console desktop:auction_end > /dev/null
我做错了什么,你能帮帮我吗? Thx提前和抱歉我的英语
答案 0 :(得分:1)
你执行cron的用户是什么? Symfony需要写入权限(取决于版本)app / cache&& app / log(s)|| var / cache&& var / log(s)如果您执行命令的用户对您尝试写入的目录没有写入权限,那么您的操作将失败。
修复此问题的一种好方法是检查错误日志,在var / log(s)app / log(s)中或检查/var/log/apache2/error.log中的apache2错误日志我会猜猜其中一个日志会包含你问题的提示。
答案 1 :(得分:0)
我可以保持很短的时间。您将需要使用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项目中执行文件。
答案 2 :(得分:0)
如果您以root身份运行它,那么它是否有效:
* * * * * root php /var/www/myProject/bin/console desktop:auction_end > /dev/null
看看是否有效。