2017-08-30 92 views
0

我有一個共享主機上的Laravel 5.4應用程序,並且cron作業不起作用。我在kernel.php設置的命令,就像這樣:是否有可能更改Laravel任務調度程序使用的PHP的路徑

$schedule->command('eoddsmaker:get_events') 
     ->withoutOverlapping() 
     ->appendOutputTo(storage_path('logs').'/cron-get_events.log') 
     ->everyMinute(); 

如果我只是在命令行中運行/usr/bin/php-5.6 artisan eoddsmaker:get_events運行良好。當它被cron作業調用時雖然它沒有運行。這是我的cron定義:

* * * * * /usr/bin/php-5.6 /var/sites/c/cyo.mydomain.com/artisan schedule:run >> /var/sites/c/cyo.mydomain.com/cron.log 2>&1 

我可以從該任務運行每分鐘,每次它運行下面的輸出被添加到cron.log文件服務器上的cron的日誌中看到:

Running scheduled command: '/usr/bin/php' 'artisan' eoddsmaker:get_events > '/dev/null' 2>&1 
X-Powered-By: PHP/5.6.8 
Content-type: text/html; charset=UTF-8 

於是挖了一個深一點,如果我看的,我已經配置爲發送輸出到以下任務cron的-get_events.log文件獲取輸出每次運行時:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /var/sites/c/cyo.mydomain.com/artisan on line 31 

Parse error: syntax error, unexpected T_STRING in /var/sites/c/cyo.mydomain.com/artisan on line 31 

Becau我在共享主機的默認PHP版本是5.2,我必須在htaccess文件中添加一條規則才能使用PHP 5.6。如果我忘記添加規則,我會得到與cron-get_events.log中相同的錯誤,所以這讓我相信命令不起作用的原因是因爲當調度程序運行它時,它正在調用命令與/usr/bin/php作爲PHP的路徑而不是/usr/bin/php-5.6

有沒有辦法配置任務調度器使用不同的路徑到PHP?

回答

0

我已經成功從改變我的調度任務定義來解決這個問題:

$schedule->command('eoddsmaker:get_events') 
    ->withoutOverlapping() 
    ->appendOutputTo(storage_path('logs').'/cron-get_events.log') 
    ->everyMinute(); 

要:

$schedule->exec('/usr/bin/php-5.6 /var/sites/c/cyo.mydomain.com/artisan eoddsmaker:get_events >> /var/sites/c/cyo.mydomain.com/cron.log 2>&1') 
    ->withoutOverlapping() 
    ->appendOutputTo(storage_path('logs').'/cron-get_events.log') 
    ->everyMinute(); 

我仍然有興趣通過知道是否有一個更好的實現這一目的的方法,以便我可以在Laravel中聲明PHP的路徑

相關問題