似乎只有everyMinute()和cron('* * * * *')对我有用。任何其他方法(例如,everyFiveMinutes,everyTenMinutes,daily,dailyAt等)都无法使用,并且总是返回“没有计划的命令可以运行”。我的cron条目始终是* * * * *,因此其他方法也应该正常工作吗?是的;我实际上已经尝试过等待其他方法,包括每天,不包括每年的:P
Cron条目:* * * * * /opt/alt/php72/usr/bin/php /home/retracted/domains/retracted/artisan schedule:run >> /dev/null 2>&1
计划条目:
$schedule->call(function () {
$stat = new Stat();
$stat->users = User::count();
$stat->reviews = Review::count();
$stat->scholen = School::count();
$stat->save();
})->daily();
所以我的问题是:为什么其他方法不起作用?如何使其他方法(特别是Daily())起作用?
答案 0 :(得分:0)
因此,首先您必须在正确的每一分钟进行一次cronjob。通过该行,您可以运行Laravel调度程序。
所以我不知道调度程序代码,但是代码可能只在那一分钟而不是向后运行。
因此,如果需要5分钟的cronjob,则必须每分钟运行一次调度程序,然后在调度程序任务中定义持续时间。
$schedule->call(function () {
$stat = new Stat();
$stat->users = User::count();
$stat->reviews = Review::count();
$stat->scholen = School::count();
$stat->save();
})->everyFiveMinutes();
因此,使用功能->everyFiveMinutes();
可以每五分钟运行一次调度程序。
答案 1 :(得分:0)
要使laravel自定义cron作业正常工作,您必须执行以下操作:
* * * * * php /var/www/html/crontutorial/artisan schedule:run >> /dev/null 2>&1
'timezone'
=> 'Europe/Berlin',
创建要在特定时间执行的自定义命令。 如果您不知道如何创建自定义命令,请看看 在laravel cronjob scheduling tutorial
在 app / Console / Kernel.php 中计划自定义标签 以下代码行
protected function schedule(Schedule $schedule)
{
$schedule->command('my:customcommand')
->cron('01 13 * * *');
}
cron将使用 app / config.php 中的时区配置每天运行1.13pm。
答案 2 :(得分:0)
您尝试指定时区吗?检查我的项目中的以下工作片段:
protected function schedule(Schedule $schedule)
{
try{
$schedule->call(function (){
(new MTSnapshot)->createSnapshot();
})->timezone('Asia/Kolkata')->dailyAt('23:57');
$schedule->call(function (){
(new MTTransaction)->schedulerStatus();
})->hourly();
$schedule->call(function (){
(new MTTransaction)->syncPendingTransactions();
(new MTCommission)->processPendingCommissions();
})->twiceDaily(1, 16);
} catch(\Throwable $t){
Log::emergency($t);
}
}