質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.54%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

artisan

artisanは、PHP Laravelフレームワークのコマンドの事です。 Artisanコマンドを使う事で、DBのテーブルやバンドル等を追加することができるコマンドです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

1回答

5987閲覧

Laravel6でcronが正しく動かない。設定したコマンドは動いている。

tenlife

総合スコア70

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

artisan

artisanは、PHP Laravelフレームワークのコマンドの事です。 Artisanコマンドを使う事で、DBのテーブルやバンドル等を追加することができるコマンドです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2020/07/03 22:45

編集2020/07/03 22:48

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の権限エラーが出ている。と認識しています。

原因がわからず、作業が詰まってしまいました。

どなたか知恵をご教授していただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenlife

2020/07/05 09:44

回答ありがとうございます。 参考記事試してみましたが、まずcronの」軌道状態を確認するコマンドも正しく動いていませんでした。 /etc/rc.d/init.d/crond statusの結果 -bash: /etc/rc.d/init.d/crond: No such file or directory ps aux | grep cron →反応なし service crond status →-bash: service: command not found 何か根本的な部分が抜けているのでしょうか? brew installでcronie-noanacronも入れましたが、うまく行きませんでした。 https://deep-blog.jp/engineer/cron-install/ https://qiita.com/Moris_Mk-II/items/fe8298bc7a3890aed4db 初めてcron触っているので全く見当違いな事言っているかもしれません、ご指摘いただけるとありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.54%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

artisan

artisanは、PHP Laravelフレームワークのコマンドの事です。 Artisanコマンドを使う事で、DBのテーブルやバンドル等を追加することができるコマンドです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。