Cronを使用して、毎分ごとにメールが届く処理をしています。
アプリケーション上でcrontab -eで下記のように設定しています。
* * * * * php /path-to-project/artisan schedule:run >> /cron.log 2>&1
下記に記述している設定で以下は確認できました。
php artisan sendmeで実行するとメールが届くのは確認できた。
php artisan schedule:runでもコマンドは動く。
laravel側の設定
<?php namespace App\Console; use App\Console\Commands\SendMeCommand; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ SendMeCommand::class ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->command('sendme')->everyMinute(); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use App\Me; use Carbon\Carbon; use Illuminate\Support\Facades\Mail; use App\Mail\SendMe; class SendMeCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'sendme'; /** * The console command description. * * @var string */ protected $description = '自分にメールを送ります'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $today = Carbon::now()->toDateString(); $mes = Me::get(); foreach($mes as $me){ if($me->send_day === $today) { 現在はtrueになるようにデータベースで設定しています。 $me->user->email; Mail::to($me->user->email)->send(new SendMe($me)); } else { echo 'まだ送る日になってません'; } } } }
ターミナルには以下の表示がされているので中身を確認しました。
内容からは毎分ごとに実行されていることが確認できたのですが、/cron.log: Permission deniedが表示されていました。
You have new mail in /var/mail/ユーザー名
less /var/mail/ユーザー名の結果 From: ユーザー名Pro.local (Cron Daemon) To: ユーザー名Pro.local Subject: Cron <ユーザー名> php /Users/ユーザー名/desktop/phps/mail-kit/artisan schedule:run >> /cron.log 2>&1 X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=ユーザー名> X-Cron-Env: <USER=ユーザー名> X-Cron-Env: <HOME=/Users/ユーザー名> Message-Id: <20200703220800.2824E1372844@ユーザー名Pro.local> Date: Sat, 4 Jul 2020 07:08:00 +0900 (JST) /bin/sh: /cron.log: Permission denied
スケジュールは毎分実行されているようでした。
今の自分の理解では、cronは動いていてlaravelで設定したスケジュールは実行されているのにメールが届かない。
cron.logの権限エラーが出ている。と認識しています。
原因がわからず、作業が詰まってしまいました。
どなたか知恵をご教授していただきたいです。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/05 09:44