cron登録で詰まった話。
# cront登録エディタ起動
crontab -e
# 下記を追記。(* * * * * にすると毎分実行)
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
これだけでcron登録はできる。
あとはLaravelで
php artisan make:controller TaskController
php artisan make:command SendMailCommand
そしてapp/Console/Kernel.phpを修正
の流れでタスクを登録できるという話だったのだが、どうにも自動実行してくれない。
正しくはcron登録時に下記のようにする必要がある。
* * * * * /usr/local/bin/php /path-to-your-project/artisan schedule:run >> /var/log/task.log 2>&1
cronはコマンドを全てフルパスで入力する。
また、dev/nullの代わりにログ出力先を指定してあげればcronのログを吐くようになる。
あとは
service cron status
で起動確認できればOK。
cronで呼び出すfunctionはstaticにすること
public static function send_mail()
{
上記のような形式にする必要あり。
#メモ
cronで呼び出すContoller内でService層などを呼び出そうと
$mail_info = $this->admin_serv->GetMailInfo($request->id);
のように$this
を使うと下記のエラーが出る。
どうやら1つのfunction内で完結するように書いてあげる必要がありそう。
local.ERROR: Using $this when not in object context
{"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0):
Using $this when not in object context at /var/www/html/******.com/app/Http/Controllers/AdminController.php:299)