在Linux系统中跑定时任务执行shell脚本,运行PHP Laravel框架下面的文件(和框架没有关系) 单独执行脚本可以 在crontab里面就不行已经解决

一、前言
在windows系统中我们通常使用系统自带的计划任务来执行定时任务,在Linux系统中我们通常配合crontab使用shell脚本或者访问url来完成定时任务,laravel的command在Linux中使用很方便,并且laravel中的command也提供了多种时间调度方法。之前一直是运用curl 或者weget 定时发送请求或者运行php脚本 来解决问题  这次想尝试运行shell脚本方式来执行命令   开始尝试在框架里面写一个php文件  直接运行shell脚本来执行发现数据库连接有问题   就搜了下资料用框架自带的命令调度 但是结合实际情况遇到了一些问题  

  
二、新建需要执行的php文件 

在你linux操作系统通过cd 命令切换到你的项目根目录 

   1 执行:php artisan make:command Cronbroadcast命令 ,会在app\console\commands命令下生成一个Cronbroadcast.php的文件。

三、写业务逻辑

其中:

  • $signature为这个类定义一个执行名称。
  • $description为这个类增加信息描述。
  • handle方法中写自己的业务逻辑。

 

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Drawings\Drawinglivebroadcast;
use App\Models\Drawings\Drawingmainbroadcast;
use App\Models\Drawings\Drawingchildbroadcast;

use Illuminate\Support\Facades\Log;




/**
 * auth:gj
 * time:2021/08/06 
 * 直录播定时任务
 */
class Cronbroadcast extends Command
{
    /**
     * The name and signature of the console command.
     * 执行地址 
     * @var string
     */
    protected $signature = 'broadcast';

    /**
     * The console command description.
     * 简单描述
     * @var string
     */
    protected $description = '直录播回调'; 

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

     /**
      * 执行定时任务脚本 
      * @Author   GJ
      * @DateTime 2021-08-05T14:16:11+0800
      * @param    Request $request [description]
      * @return   [type]  [description]
    */
    public function handle()
    {

     try {

           Log::info('测试定时任务:'.date('Y-m-d H:i:s'));                        
                        
     }else{
                

        }catch (\Exception $e){

           Log::info($e->getMessage());

        }

    
    }
}

 在控制台中执行该类的handle方法,使用命令:php artisan broadcast即可。其中broadcast$signature中定义的名称。

四、框架中配置相关配置

commands同级目录下有一个kernal.php

$commands属性里引入我们创建的定时测试类,并在schedule方法中进行配置任务调度时间。

其中everyFiveMinutes代表每分钟执行一次。

 五、Linux中开启定时任务调度   执行shell脚本 

首先我们写一个shell脚本  

 

 执行这个脚本没问题但是放到crontab定时任务里面就不行了    最后解决了有将近两个小时原来是大家经常遇到的问题  shell脚本在定时器里面需要给上环境变量 

 

 定时任务相关我就不介绍了   不懂自己在网上搜     自己学去   从左到右依次是分 时  日 月 周 

  但是发觉单独执行shell脚本是行的   但是在定时器里面就不执行了

 source /etc/profile; 这句在脚本最上方加上就行了    细心的我发现 脚本里面的其他是执行的但是其他地方不执行   

 好了问题   已经解决 

当然  如果想要根据不执行脚本再执行php代码   直接执行 laravel下面的定时任务  可以直接这样执行 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值