駆け出しエンジニアの勉強記録

アラフォー女の未経験すぎる業界での勉強記録

laravelでcronの登録

cron(クロン)とは?
自動でに定期的に実施する作業を登録する所。
laravelの場合、/app/Console/Kernel.phpのscheduleメソッドに登録したものをcron(crontab)に登録する 。

以下、laravel.logに10分毎に今の日時を表示させる登録の流れ。
成功例

2024-04-25 16:10:01 Running [Callback] [2024-04-25 16:10:01] local.INFO:
スケジュール実行:2024年04月25日 16時10分01秒
........................... 10ms DONE


2024-04-25 16:20:01 Running [Callback] [2024-04-25 16:20:01] local.INFO:
スケジュール実行:2024年04月25日 16時20分01秒
........................... 10ms DONE


①app/Console/Kernel.phpのscheduleメソッドに定期的に行いたいことを登録

use Illuminate\Support\Facades\Log;
protected function schedule(Schedule $schedule)
{
$schedule->call(function(){
$date = new DateTime('now');
$formatteDate = $date->format('Y年m月d日 H時i分s秒');
Log::info("スケジュール実行:{$formatteDate}");  // laravel.logに表示させる
});
}

※ここに直接書かなくても、make:commandで作ったコマンドを登録もできる

$schedule->command('writelog:info')
->everyMinute();


php artisan schedule:runコマンド叩いてちゃんと実行されたらコードはOK


③PCにはいっているcronを使って①を登録、10分毎に実行させる。
ターミナルでcrontab -eコマンドで一番上に登録。

*/10 * * * * cd /Users/work/rv && /usr/local/opt/php@8.1/bin/php
artisan schedule:run >> /Users/work/rv/storage/logs/laravel.log
2>&1

10分毎に実行させる  
 アスタリスクには(にある数字を入れられる)
   分(0〜59) 時(0〜23) 日(1〜31) 月(1〜12) 曜日(0(日)〜6(土))
   *     *       *     *        * 

(例1)毎日10:30に実行させる
30  10  *  *  *  cd /Users...

(例2)月曜朝8時に実行させる
0  8  *  *  1  cd /Users...

(例2)30分毎に実行させる
*/30  *  *  *  *  cd /Users... /*をつけると「毎に」になる

PCから見たそのプロジェクトのパス

PCに入ってるPHP(ディレクトリ)を使ったコマンド実行 = 固定パス
エラーを書き出すlogファイルがあるパス(今回はlaravel.log)
発生したエラーを↑に書き出すのに必須
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【cronはvimエディタだから以下の操作方法】
編集開始・入力→ i 押す 
空白を消す→ dd
編集終了→ esc
保存→ :wq

vim操作 vimを触った事がない人へ最低限の知識で編集する #Vim - Qiita

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

cronがトリガーとなり10分毎に実行される。

④crontabに登録されているトリガーはcrontab -lコマンドで確認可能
⑤crontabに登録されているトリガーはcrontab -rコマンドで削除可能