1.artisan命令:

  1. php artisan make:command SendRejectEmail

2.app/Console/Commands下就会看到SendRejectEmail.php

  1. /**
  2. * The name and signature of the console command.
  3. *
  4. * @var string
  5. */
  6. protected $signature = 'send-reject-email:email';
  7.  
  8. /**
  9. * The console command description.
  10. *
  11. * @var string
  12. */
  13. protected $description = 'send reject email';
  • 需要执行的方法写在handle中
  1. /**
  2. * Execute the console command.
  3. *
  4. * @return mixed
  5. */
  6. public function handle()
  7. {
  8.  
  9. }
  1. <?php
  2. namespace App\Console\Commands;
  3.  
  4. use Carbon\Carbon;
  5. use Illuminate\Console\Command;
  6. use App\Models\ResumeRejectMail;
  7. use App\Mail\RejectMail;
  8. use App\ElasticSearch\Index\ResumeFilterIndex;
  9. use Mail;
  10.  
  11. class SendRejectEmail extends Command
  12. {
  13. /**
  14. * The name and signature of the console command.
  15. *
  16. * @var string
  17. */
  18. protected $signature = 'send-reject-email:email';
  19.  
  20. /**
  21. * The console command description.
  22. *
  23. * @var string
  24. */
  25. protected $description = 'send reject email';
  26.  
  27. /**
  28. * Create a new command instance.
  29. *
  30. * @return void
  31. */
  32. public function __construct()
  33. {
  34. parent::__construct();
  35. }
  36.  
  37. /**
  38. * Execute the console command.
  39. *
  40. * @return mixed
  41. */
  42. public function handle()
  43. {
  44. $lists = ResumeRejectMail::Status(ResumeRejectMail::STATUS)->select('id','resume_id','reject_time')->get();
  45. $index = new ResumeFilterIndex();
  46.  
  47. if($lists){
  48. foreach ($lists as $key=>$val)
  49. {
  50. if(Carbon::now()->timestamp > strtotime($val->reject_time)){
  51. //获取es上当前id信息
  52. $data = $index->getValue($val->resume_id);
  53. if($data){
  54. $toMail = $data['email'];
  55. // 获取邮箱标题
  56. $title = '面试邀请';
  57. Mail::to($toMail)->send(new RejectMail($data,$title));
  58.  
  59. //更改es简历为失效
  60. $es_data = ['status' => 3];
  61. $index->updateValue($val->resume_id,$es_data);
  62.  
  63. //更新邮件拒信表
  64. ResumeRejectMail::ID($val->id)->update([
  65. 'email' => $toMail,
  66. 'sendtime' => Carbon::now(),
  67. 'status' => 2,
  68. ]);
  69. }
  70. }
  71. }
  72. }
  73.  
  74. return true;
  75. }
  76. }

3.在app/Console/Kernel中注册路由

  1. <?php
  2.  
  3. namespace App\Console;
  4.  
  5. use Illuminate\Console\Scheduling\Schedule;
  6. use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
  7.  
  8. class Kernel extends ConsoleKernel
  9. {
  10. /**
  11. * The Artisan commands provided by your application.
  12. *
  13. * @var array
  14. */
  15. protected $commands = [
  16. //
  17. Commands\SendRejectEmail::class,
  18. ];
  19.  
  20. /**
  21. * Define the application's command schedule.
  22. *
  23. * @param \Illuminate\Console\Scheduling\Schedule $schedule
  24. * @return void
  25. */
  26. protected function schedule(Schedule $schedule)
  27. {
  28. // $schedule->command('inspire')
  29. // ->hourly();
  30. $schedule->command('send-reject-email:email')->everyMinute();
  31. }
  32.  
  33. /**
  34. * Register the commands for the application.
  35. *
  36. * @return void
  37. */
  38. protected function commands()
  39. {
  40. $this->load(__DIR__.'/Commands');
  41.  
  42. require base_path('routes/console.php');
  43. }
  44. }

4.在linux的crontab -e中插入

建议:这里的php路径不要和文档一样就写php,否则crontab可能识别不到,造成手动执行可以生效,写在定时器中却不执行,执行 whereis php 可以查看当前php执行文件,按实际填写php路径

  1. * * * * * /usr/local/php/bin/php /usr/share/nginx/recruitmentapi/artisan schedule:run >> /dev/null 2>&1

注意:laravel的command需要关闭proc_open、proc_get_status函数禁用。

5.关于laravel crontab不执行的问题

手动执行:php artisan send-reject-email:email 可以生效

但是写在定时器中却不执行 :* * * * * php /usr/share/nginx/recruitmentapi/artisan schedule:run >> /dev/null 2>&1

原因:php的路径并不识别 或者说 crontab 中使用的php的可执行文件 和在脚本中执行的php文件不一样

执行 whereis php

  1. [root@izwz94f1q2m5ldkvsdx5rkz recruitmentapi]# whereis php
  2. php: /usr/local/php /usr/local/php/bin/php

可以发现 当前有不只一个的php执行文件 发现自己在使用的php路径之后 修改 crontab中的配置

  1. crontab -e
  2.  
  3. * * * * * /usr/local/php/bin/php /usr/share/nginx/recruitmentapi/artisan schedule:run >> /dev/null 2>&1

查看crontab日志记录:tail -f /var/log/cron

问题解决

参考:

laravel写crontab: https://www.jianshu.com/p/fc90ff514ce7

laravel crontab不执行的问题: https://blog.csdn.net/qq_36638599/article/details/80692922

laravel写crontab定时任务(发送邮件)和laravel crontab不执行的问题的更多相关文章

  1. Linux下Crontab定时任务的使用教程 以及 无法执行定时任务的解决方案

     前言 本文学习思路:Linux的corntab定时任务的使用教程  --> 定时任务无效的解决方案  Linux的corntab定时任务的使用教程 1. 首先,输入命令 打开crontab定时 ...

  2. linux crontab定时任务运行shell脚本(shell执行sql文件)

    https://www.cnblogs.com/tiankongjava/p/6106743.html 今天做个linux定时任务(每晚12点把表汇总). 顺便写个博客记录一下~~ 为什么用linux ...

  3. linux crontab 定时任务,任务命令单独linux执行正常,放定时任务就不执行了,解决办法 (原)

    这是我crontab里面的内容 */30 * * * *  ./usr/bin/wget -q -O sync_log.txt http://fly.dllm.cn/index.php/Home/In ...

  4. Linux命令之Crontab定时任务,利用Crontab定时执行spark任务

    Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...

  5. crontab定时任务配置记录

    一.前言 今天简单记录下crontab的配置 二.crontab目录 /etc/crontab 文件 这是系统运行的调度任务 /var/spool/cron 目录 用户自定义的crontab任务放在此 ...

  6. 【Linux】crontab 定时任务

    7月份,公司海外运营国发生数据库联接未释放,造成连接池连接不足的情况, 当时查询并没有及时解决问题, 为了避免现场同事多次人工重启系统的,因此写了个shell脚本,通过crontab 实现系统重启,但 ...

  7. Linux crontab 定时任务命令详解

    一.简介 crontab 命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行.通常,crontab 储存的指令被守护进程激活, cr ...

  8. Linux crontab 定时任务

    http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html 19. crontab 定时任务 通过crontab 命令,我们 ...

  9. crontab 定时任务格式

    如下内容节选自<Linux Crontab 定时任务 命令详解> 用crontab -e 添加要执行的命令 添加的命令必须以如下格式: * * * * * /command path 前五 ...

随机推荐

  1. 前端学习(二十六)移动端s(笔记)

    ===================================================弹性布局rem布局---------------------------------------- ...

  2. 使用Maven创建Web项目(转)

    转自:http://ju.outofmemory.cn/entry/49508 本文通过Maven完成一个简单的Web项目(注意,Spring配置不是重点,看看就行) 1.从Maven模板创建Web应 ...

  3. sqoop 数据导入hive

    一. sqoop: mysql->hive sqoop import -m 1 --hive-import --connect "jdbc:mysql://127.0.0.1:3306 ...

  4. Es学习第一课,了解基本功能和概念

    Elasticsearch作为这几年最流行的搜索引擎,越来越多的互联网企业都在采用它:作为java开发者来说,如果想进一步提高自己能力,同时也为了能够在实际工作中遇到搜索.存储问题多一个解决方案,学习 ...

  5. 四轴遥控器ADC部分

    一.ADC参考手册学习 A/D转换可以按单次.连续设置采样:可以一一扫描或间断的对多个ADC通道进行采集. ADC的结果有左对齐和右对齐. ADC的输入时钟不得超过14Mhz,它是由PCLK2经分频产 ...

  6. MOSFET学习

    MOS/CMOS集成电路简介及N沟道MOS管和P沟道MOS管 在实际项目中,我们基本都用增强型mos管,分为N沟道和P沟道两种. 我们常用的是NMOS,因为其导通电阻小,且容易制造.在MOS管原理图上 ...

  7. haproxy笔记

    haproxy安装.启动.日志配置 方法1:#安装 yum install haproxy -y #日志配置 sed -i 's/^#$ModLoad imudp/$ModLoad imudp/g' ...

  8. lambda表达式学习例子

    https://www.cnblogs.com/franson-2016/p/5593080.html https://www.cnblogs.com/fx-blog/p/11745205.html ...

  9. HTML5: HTML5 语义元素

    ylbtech-HTML5: HTML5 语义元素 1.返回顶部 1. HTML5 语义元素 语义= 意义 语义元素 = 有意义的元素 什么是语义元素? 一个语义元素能够清楚的描述其意义给浏览器和开发 ...

  10. linux搭建集群

    磁盘分布 /boot 系统启动时需要的内存(200m) / 系统的可用磁盘大小(10240m) swap 交换内存 建议和内存一致(200m) 名字统一设置: 虚拟机名字 计算机名字 网络中的名字 默 ...