标签 linux 下的文章

tp5的queue服务安装,请参考composer 安装的方法!这里不再累述。本文主要是针对开发【开启服务】和【关闭服务】

本文仅支持在linux上使用。

根据linux的脚本实例,如:

kill -9 11340;
kill -9 8825;

linux多命令的执行使用英文;隔开。这个就为关闭多个queue服务提供了条件。

设计思路:

一、创建进程,写入进程号【开启服务】

队列: OrderUnPay ---对未支付的订单进行延时作废。

脚本命令如下:

"cd /www/wwwroot/saas.com/; php think queue:work --queue OrderUnPay --daemon > /dev/null 2> /dev/null & echo true"

php exec 执行以上linux脚本后。

使用命令

ps -aux | grep queue

810.png

可以看到里面的15865进程ID

那么如何才能将这个进程ID 15862输出,并写入数据库,方便后面的【关闭服务】

ps -aux|grep OrderUnPay |awk '{print $2}' | head -1

可以使用以上这个命令,通过关键词搜索,并倒序拿出当前的结果

以下php代码,进程ID就可以通过$out[0]

$pid_sq="ps -aux|grep OrderUnPay |awk '{print $2}' | head -1";
$process=exec($pid_sq,$out);
$process_id=isset($out[0])?$out[0]:0;

二.使用多个kill -9 制作【关闭服务】

kill -9 15862;

kill -9 ....;


以下是我tp下的【单个开启服务】和【关闭全部服务】功能

    #关闭服务
public function closed(){
     $out=array();
     $message='关闭服务失败!';
     $output='';
    if(strpos(PHP_OS,"Linux")!==false){
      #Linux套字
      $map['process_id']=array('gt',0);
      $process_ids=$this->model->where($map)->column('process_id');
      if(!empty($process_ids)){
          $exec_power ='';
        foreach($process_ids as $k=>$v){
           $exec_power .="kill -9 ".$v." ;"; 
        }
        $exec_power .=" echo true";
        #exit($exec_power);
        $message = exec($exec_power,$output, $ret);
      }else{
        $message ='没有进程数据';
      }
      
      #$exec_power ="kill -s 9 `ps -aux | grep queue| grep -v grep | awk '{print $2}'` & echo true";
    }else if(strpos(PHP_OS,"WIN")!==false){
      #Win套字
      $exec_power ='cd /d 2>&1'. ROOT_PATH .' & php think queue:restart';
      $message = exec($exec_power,$output, $ret);
    }else{
      $this->error('未识别的操作系统');
    }
    #命令执行
    #$message = shell_exec($exec_power);

    if(count($output)>0){
      foreach($output as $k=>$v){
        $info=iconv('GB2312', 'UTF-8',$v);
        $out[$k]=$info;
        $message.=$info;
      }
    }
    #返回结果
    if(!$ret){    
      $this->model->where(array('status'=>1))->update(['work_status'=>0,'process_id'=>0]);
      $this->success('关闭服务成功','',$exec_power);
    }else{
       $this->error($message,'');
    }
}
    #启动服务
public function powers(){
     $id =$this->request->param('id');
     $info=$this->model->where(array('id'=>$id))->find();
     $daemon =1;
     #获取标识
     $job_code =$info['job_code'];
     if(!empty($job_code)){
       #判断win还是linux
       if(strpos(PHP_OS,"Linux")!==false){
             #Linux套字
             if($daemon){
             $exec_power ='cd '. ROOT_PATH .'; php think queue:work --queue ' .$job_code.' --daemon > /dev/null 2> /dev/null & echo true';
             }else{
             $exec_power ='cd '. ROOT_PATH .'; php think queue:work --queue ' .$job_code.' & echo true';
             }
        }else if(strpos(PHP_OS,"WIN")!==false){
             #Win套字
             if($daemon){
               $exec_power ='cd /d '. ROOT_PATH .' & start /B php think queue:work --queue ' .$job_code.' --daemon'.' & echo true';
             }else{
               $exec_power ='cd /d "'. ROOT_PATH .'" & php think queue:work --queue ' .$job_code.' & echo true';
             }
        }else{
          $this->error('未识别的操作系统');
        }

        #命令执行
        $message ='';
        $process_id='';
        if($daemon>0){
            if(strpos(PHP_OS,"WIN")!==false){
            #打开一个进程
            $win_pid =popen($exec_power, 'r');
            $ret =fgets($win_pid);
            pclose($win_pid); #对应的是int(1) 
            }else{
            #执行命令
             $ret = shell_exec($exec_power);
             #查看进程
              $pid_sq ="ps -aux|grep $job_code |awk '{print $2}' | head -1";
              $process=exec($pid_sq,$out);
              $process_id=isset($out[0])?$out[0]:0;
            }
        }else{
         $ret = shell_exec($exec_power);
        }
        #获取进程ID
        $process_id=$process_id>0?$process_id:'';
        if($ret){
           $this->model->where(array('id'=>$id))->update(['work_status'=>1,'process_id'=>$process_id]);
           $this->success('启动成功','',$exec_power);    
        }else{
           $this->error('启动失败','',$exec_power);
        }
     }else{
        $this->error('未找到对应的任务标识');
     }
}

禁止ping设置

临时:

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

永久:

echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf
sysctl -p  # 执行这条命令使更改后的 /etc/sysctl.conf 配置文件生效

注意:如果 /etc/sysctl.conf 配置文件里已经有 net.ipv4.icmp_echo_ignore_all 字段了,那么直接用 vim 进去更改对应的值即可。

1.特定用户下通过crontab -e命令编辑crontab任务,比如www
命令应该为:

crontab -e -u www

进入定时任务编辑界面:
701.png

英文键盘, 按【i】进入编辑模式
750.png

写入定时任务规则,比如我这里是给定时任务插件执行脚本

          • /usr/bin/php /home/wwwroot/www.kinmor.com/public/index.php /addons/crontab/autotask/index > /dev/null 2>&1 &

按【ESC】退出编辑模式
907.png
英文键盘,按【:wq】 保存退出

2.常用命令

启动服务

/bin/systemctl restart crond.service 

重新载入配置

/bin/systemctl reload  crond.service  

查看crontab服务状态

/bin/systemctl status  crond.service 

3.crontab相关命令

语法:crontab -u <用户名称> 或 crontab -u <用户名称>

参数:
-e  编辑该用户的计时器设置。
-l  列出该用户的计时器设置。
-r  删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。

centos安装iftop

1.安装命令

yum install iftop –y

2.使用直接输入命令

iftop

3.其他使用方法

监控某网卡

iftop -i eth0 -n

显示网卡服务

iftop -i eth0 -n -P

4.常用的参数

-i  设定监测的网卡,如:# iftop -i eth1

-B  以bytes为单位显示流量(默认是bits),如:# iftop -B

-n  使host信息默认直接都显示IP,如:# iftop -n

-N  使端口信息默认直接都显示端口号,如: # iftop -N

-F  显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h  (display this message),帮助,显示参数信息

-p  使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b  使流量图形条默认就显示;

-f  这个暂时还不太会用,过滤计算包用的;

-P  使host信息及端口信息默认就都显示;

-m  设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

3814.png

5.将命令查询内容以log文件导出

如 将查询ip流量记录导出/tmp/iftop.log文件
iftop -i eth0 -N -P -t -L 50 -s 10 > /tmp/iftop.log

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head