Laravel ジョブ処理を crontab で自動的に行う

メールなどを複数本送るのに以下のようなソースでキューを貯めておけます。

Laravelっていいよね。

キューを貯めるところ

〜〜〜 前略 〜〜〜

		foreach ( $sendmail_list as $mail_item ) {

			// メール送信
			$contact_ary          = array();
			$contact_ary['email'] = trim( $mail_item->email );

			$contact_ary['mail_content'] = $mail_content;
			$contact_ary['mail_sender_email'] = $mail_sender_email;
			$contact_ary['mail_sender_name'] = $mail_sender_name;
			$contact_ary['mail_subject'] = $mail_subject;

			$contact              = (Object) $contact_ary;

			if ( ! empty( $mail_item->email ) ) {

				Mail::to( $mail_item->email )
				    ->queue( new EventAdminMail( $contact ) ); // 引数にリクエストデータを渡す
Log::debug("===SEND_EMAIL:".$mail_item->email);
			}
		}

〜〜〜 後略 〜〜〜

これでジョブを貯めておいて…

貯めて crontab でキューを処理したい場合、 crontab でこんな登録すると良いよって話。

Laravelの artisan は通常ユーザーで使いましょう。

crontab に登録する

*/5  *    *    *    * cd /var/www/html ; php artisan queue:work --stop-when-empty

こんな感じでキュー処理を 5分間隔で行います。

cd コマンドで システムのルートに移動してキュー処理します。

システムのルート( artisan がある場所 )は /var/www/html としてます。

artisan queue:work がキュー処理なのですが

引数につけた –stop-when-empty が終わったらジョブ処理終わりにします。

この引数をつけないと ずっとキューを待っちゃいます。

処理のログがこちら

Jul 31 17:00:01 html CROND[19877]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jul 31 17:00:01 html CROND[19878]: (user01) CMD (cd /var/www/html; php artisan queue:work --stop-when-empty)
Jul 31 17:01:01 html CROND[19892]: (root) CMD (run-parts /etc/cron.hourly)
Jul 31 17:01:01 html run-parts(/etc/cron.hourly)[19892]: starting 0anacron
Jul 31 17:01:01 html run-parts(/etc/cron.hourly)[19901]: finished 0anacron

こんな感じで 5分ごと に処理を行います。

場合によっては短くしてもいいし、長くしてもいいと思います。

最近買ったこの本、良いですよ〜

Laravel おすすめ本!

実践開発っていうだけあってすごく実践で使える内容となっています。

大変参考になります!!!

この記事が気に入ったら
いいね ! しよう