快乐每一天

自己选择的路,跪着也要走下去...

标签 定时任务 下的文章

lnmp执行定时任务抓取文章信息并且入库(ThinkPHP5定时任务配合修罗BBS)(第一版初稿)

案例站点:传送门

定时任务脚本

vi /root/hello.sh

shell脚本要写环境变量才能生效

#!/bin/bash
export PATH="/usr/local/php/bin:$PATH"
export PATH="/:$PATH"
cd /mydata/catch/
php think test
echo "hello word!"

查看执行过的定时任务

tail -f /var/log/cron

查看定时任务(1分钟执行一次,执行定时任务的时候用source 环境变量才会生效)

[root@VM_0_15_centos /]# crontab -e
*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
*/1 * * * *  source  /root/hello.sh

查看PHP定时脚本

<?php
/**
 * Created by PhpStorm.
 * User: cwwx0
 * Date: 2019/6/7
 * Time: 21:52
 */

namespace app\index\controller;


use think\console\Command;
use think\console\Input;
use think\console\Output;
use QL\QueryList;
use think\Db;

class Test extends Command
{
    protected function configure()
    {
        $this->setName('test')->setDescription('Here is the remark ');
    }

    protected function execute(Input $input, Output $output)
    {

        $url = 'https://it.ithome.com/ityejie/';
// 元数据采集规则
        $rules = [
            'title' => ['h2>a','text'],
            'link' => ['h2>a','href'],
            'img' => ['.list_thumbnail>img','src'],
            'desc' => ['.memo','text']
        ];
        // 切片选择器
        $range = '.ulcl>li:gt(0)';
        $rt = QueryList::get($url)->rules($rules)->range($range)->query()->getData()->map(function($item){
            $qlde = QueryList::get($item['link']);
            $rtdetail = [];
            $rtdetail['title'] = $qlde->find('h1')->text();
            $rtdetail['author'] = $qlde->find('#author_baidu>strong')->text();
            $rtdetail['createtime'] = $qlde->find('#pubtime_baidu')->text();
            $rtdetail['content'] = $qlde->find('.post_content')->html();
            $item['content']=$rtdetail;
            return $item;
        })->all();

        foreach (array_reverse($rt) as $val){

            $check=Db::name('thread')->where('subject',$val['title'])->find();
            if($check){
                continue;
            }
            $int=array();
            $int['fid']=5;
            $int['uid']=1;
            $int['userip']=1881148765;
            $int['subject']=$val['title'];
            $int['create_date']=strtotime($val['content']['createtime']);
            $int['last_date']=strtotime($val['content']['createtime']);
            $tid=Db::name('thread')->insertGetId($int);


            $second=array();
            $second['uid']=1;
            $second['tid']=$tid;
            Db::name('mythread')->insert($second);

            $thirdpost=array();
            $thirdpost['tid']=$tid;
            $thirdpost['uid']=1;
            $thirdpost['isfirst']=1;
            $thirdpost['create_date']= strtotime($val['content']['createtime']);
            $thirdpost['userip']=1881148765;
            $thirdpost['images']=0;
            $thirdpost['files']=0;
            $thirdpost['doctype']=0;
            $thirdpost['quotepid']=0;
            $thirdpost['r_f_c']=0;
            $thirdpost['r_f_a']=0;
            $thirdpost['likes']=0;
            $thirdpost['repeat_follow']='';
            $thirdpost['message']=$val['content']['content'];
            $thirdpost['message_fmt']=$val['content']['content'];
            $pid=Db::name('post')->insertGetId($thirdpost);
            Db::name('thread')->where('tid',$tid)->update(array('firstpid'=>$pid,'lastpid'=>$pid));

            $output->writeln("*****************************************:");
            echo '文章'.$val['title'].'导入成功';
            $output->writeln("*****************************************:");
        }
//        print_r($rt);
        $output->writeln("TestCommand:");
    }
}

手动执行一次看一下结果如下所示

[root@VM_0_15_centos /]# /root/hello.sh
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/http.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/http.so: cannot open shared object file: No such file or directory in Unknown on line 0
*****************************************:
文章震撼体又来!微信助手辟谣“高考满分作文来了,震撼13亿人...”导入成功*****************************************:
*****************************************:
文章华为:2019年年内或无法完成超越三星的目标导入成功*****************************************:
*****************************************:
文章快狗打车否认裁员50%:调整比例未超员工总数的3.5%导入成功*****************************************:
*****************************************:
文章中国铁路12306出故障,大量用户反馈无法支付导入成功*****************************************:
*****************************************:
文章国资委:三家运营商要进一步加强合作,避免5G重复投资导入成功*****************************************:
*****************************************:
文章四部委联合开展专项整治活动:将处罚并曝光违法违规网站导入成功*****************************************:
*****************************************:
文章回应格力举报,奥克斯以损害商誉为由报案:宁波警方已受理导入成功*****************************************:
*****************************************:
文章安卓绿色联盟分析八大新闻类App内存占用情况导入成功*****************************************:
*****************************************:
文章工商银行:正式推出首家基于5G应用的新型智能网点导入成功*****************************************:
*****************************************:
文章菜鸟联手百世、申通、圆通率先上线新版电子面单导入成功*****************************************:
*****************************************:
文章阿里云与慧联无限发布首款LoRa室内安防套装产品 可30秒内完成安装导入成功*****************************************:
*****************************************:
文章618物流大提速,苏宁易购开启五大新仓库导入成功*****************************************:
*****************************************:
文章CES Asia 2019智慧5G小店被定义 苏宁联通携手共进5G时代导入成功*****************************************:
*****************************************:
文章618苏宁汽车O2O服务见效,自营轮胎销售上涨352%导入成功*****************************************:
TestCommand:
阅读全文

Jiacrontab:一个带Web面板的定时任务&常驻后台管理工具

说明:我们一般使用程序的时候,很多都需要使用定时任务来按时重启/执行应用,还有的也需要让程序一直常驻后台,对这类要求使用的基本上是crontab和Systemctl/Supervisor,不过对于很多人来说配置挺麻烦的,这里就分享一个带Web面板的定时任务&常驻后台工具,可以很方便设置定时任务和常驻后台操作,也可以同时管理多台服务器,很强大,使用起来很方便。

截图

2019-05-07T02:24:36.png

2019-05-07T02:24:15.png

功能
允许设置每个脚本的超时时间,超时操作可选择邮件通知管理者,或强杀脚本进程。
允许设置脚本的最大并发数。
一台server管理多个client。
每个脚本都可在server端灵活配置,如测试脚本运行,查看日志,强杀进程,停止定时等。
允许添加脚本依赖(支持跨服务器),依赖脚本提供同步和异步的执行模式。
友好的web界面,方便用户操作。
脚本出错时可选择邮箱通知多人。
支持常驻任务,任务失败后可配置自动重启。
支持管道操作。

原理
jiacrontab由server,client两部分构成,两者完全独立通过rpc通信。
server:向用户提供可视化界面,调度多个client。
client:实现定时逻辑,隔离用户脚本,将client布置于多台服务器上可由server统一管理。 每个脚本的定时格式完全兼容linux本身的crontab脚本配置格式。

安装

Github地址:https://github.com/iwannay/jiacrontab

1、安装依赖

CentOS系统

yum -y install unzip

Debian/Ubuntu系统

apt install unzip -y

2、运行Jiacrontab
先访问该地址→传送门,根据操作系统获取最新版本的Jiacrontab下载地址,然后使用命令:

下载jiacrontab

wget https://jiacrontab.iwannay.cn/download/jiacrontab-v1.4.5-linux-amd64.zip

解压

unzip jiacrontab-v1.4.5-linux-amd64.zip

进入服务端文件夹并运行服务端

cd jiacrontab/server
nohup ./jiaserver &> jiaserver.log &

进入客户端文件夹并运行客户端

cd .. && cd client
nohup ./jiaclient &> jiaclient.log &
然后还需要开放20000-20003端口,使用命令:

CentOS 7

firewall-cmd --zone=public --add-port=20000-20003/tcp --permanent
firewall-cmd --reload

CentOS 6(一般情况下,Debian和Ubuntu不需要开启,如果访问不了Web就需要开启了)

iptables -A INPUT -p tcp -dport 20000:20003 -j ACCEPT
iptables save
service iptables restart
然后访问http://IP:20000就可以看到jiacrontab WEB界面了,初始用户名为admin,密码为123456。

配置文件
服务端配置文件:server/server.ini,可以在里面修改用户名、密码,邮箱,允许使用的命令等信息。
客户端配置文件:client/client.ini ,可以修改报警邮箱,开启日志及连接服务端地址。

基本使用说明

1、定时任务
超时设置和超时操作
超时后会进行设置的超时操作 默认值为0 不判断超时

2、最大并发数
最大并发数 控制 同时有几个脚本进程
默认最大并发数为1,若不设置超时时间,当定时任务第二次执行时,若上一次执行还未完成
则会kill上一个脚本,进行本次执行。
防止脚本无法正常退出而导致系统资源耗尽

3、添加依赖
依赖就是用户脚本执行前,需要先执行依赖脚本,只有依赖脚本执行完毕才会执行当前脚本。
并发执行:并发执行依赖脚本,任意一个脚本出错或超时不会影响其他依赖脚本,但是会中断用户脚本
同步执行:同步执行依赖脚本,执行顺序为添加顺序,如果有一个依赖脚本出错或超时,则会中断后继依赖,以及用户脚本

脚本异常退出通知 如果脚本退出码不为0,则认为是异常退出

常驻任务

常驻任务检查脚本进程是否退出,如果退出再次重启,保证脚本不停运行
其他同 定时任务

原文地址: https://www.xiaoz.me/archives/11640/comment-page-1

阅读全文

Linux定时任务笔记

一、Linux定时任务

crontab -l #查看详情
crontab -e #设置定时任务

二、Linux提示no crontab for root的解决办法

提示:
no crontab for root
网上也搜出了一大堆的解决办法,但是每一个是我想要的。
经过自己研究才发现解决办法很简答!就是没有crontab嘛,建一个就是咯。

1、登录到root用户。
2、在root下输入:crontab -e
3、可能会提示你:
no crontab for root - using an empty one
然后会叫你“Select a editor ......”下面有几个选项,就是叫你选择编辑器。我一般选 vim.tiny
4、进入crontab编辑页面之后就直接"shift+:",然后输入wq保存即可。
然后一个新的crontab就生成了!

三、准备工作已经做好,下面是新增定时任务环节

crontab -e 进入vim编辑界面
按 i 进入编辑状态
输入下面的内容
* * * * * /usr/bin/curl http://8.201818.com/index/test
* * * * * sleep 10; /usr/bin/curl http://8.201818.com/index/test
* * * * * sleep 20; /usr/bin/curl http://8.201818.com/index/test
* * * * * sleep 30; /usr/bin/curl http://8.201818.com/index/test
* * * * * sleep 40; /usr/bin/curl http://8.201818.com/index/test
* * * * * sleep 50; /usr/bin/curl http://8.201818.com/index/test
按 esc 退出 编辑状态
按shift + :
按wq
enter
保存并退出vim编辑器

重启 cron
service cron restart
上面的每十秒执行一次 对应的地址访问就成功启动了!

crontab -e
#此时会进入vi的编辑界面让你编辑工作。注意到,每项工作都是一行。
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 时 日 月 周 |《==============命令行=======================》|

2019-03-04T01:29:15.png

阅读全文