h5商城网站建站,一个公司的网站怎么做的,做公司网站的好处以及优势,网站建设公司 成都简介 在postgresql数据库中并没有想oracle那样的job功能#xff0c;要想实现job调度#xff0c;就需要借助于第三方。本人更为推荐kettle#xff0c;pgagent这样的图形化界面#xff0c;对于开发更为友好
优势劣势Linux 定时任务#xff08;crontab#xff09; 简单易用…简介 在postgresql数据库中并没有想oracle那样的job功能要想实现job调度就需要借助于第三方。本人更为推荐kettlepgagent这样的图形化界面对于开发更为友好
优势劣势Linux 定时任务crontab 简单易用是 Linux 系统本身提供的标准定时任务工具。可以通过编辑 crontab 文件直接设置作业调度规则。可以使用各种 shell 脚本或命令来执行作业自此SQL以外的shell脚本拓展性较强数据库无需重启 与 PostgreSQL 数据库集成较弱无法直接操作数据库。对于需要与数据库紧密交互的作业需要编写额外的脚本或程序原生功能少跨IP控制较差pgagent 是官方维护的 PostgreSQL 扩展可以实现作业调度和管理。提供了图形用户界面PGAdmin和命令行接口可以方便地创建、编辑和管理作业。能够直接操作 PostgreSQL 数据库。数据库无需重启多postgresql数据库之间的同步管理图形化界面入门门槛低支持shellbatch拓展性较强 功能相对简单不支持复杂的作业依赖关系和任务流程控制。在高并发负载情况下可能性能有一定限制不支持异构异地数据库的作业控制kettle也称为 Pentaho Data Integration 是一款功能强大的 ETLExtract, Transform, Load工具可以进行数据抽取和转换。提供了可视化的作业设计界面支持复杂的作业流程控制和依赖关系。可以与 PostgreSQL 数据库进行无缝集成。无需重启数据库图形化界面入门门槛低支持异构异地数据库直接的复杂流控制支持多种语言拓展性强大 外部工具与 PostgreSQL 数据库并非紧密耦合。windows需要挂着job页面才能保证job程序运行linux中可以支持后台挂JOBpg_cron 是一个基于 PostgreSQL 的作业调度扩展可以直接在数据库中设置和管理作业。与 PostgreSQL 数据库高度集成可以直接操作数据库对象和数据。 功能比较基础不支持复杂的作业流程和依赖关系。在高并发负载情况下可能性能会有所限制。需要重启数据库不支持异构异地数据库之间复杂的控制流管理pg_timetable 是一个基于 PostgreSQL 的高级作业调度框架提供了丰富的功能和灵活的配置选项。支持复杂的作业依赖关系、任务流程控制和灵活的调度策略。与 PostgreSQL 数据库深度集成可以直接操作数据库对象和数据。功能较为完善 由于功能较为强大配置和管理相对复杂。编程语句 可以使用javapython,自功能较为完善可控性强拓展性高 技术门槛较高
创建模拟函数 以上文pgbouncer创建过程中由于userlist需要更新为例子创建一个job完成userlist的定时更新。
CREATE OR REPLACE FUNCTION export_userlist_to_file(date_param character)RETURNS character AS
$$
BEGINEXECUTE COPY (SELECT || usename || || passwd || FROM pg_shadow) TO /home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt;RETURN date_param;
END;
$$
LANGUAGE plpgsql;select export_userlist_to_file(20231010) Linux 定时任务crontab 这个是在linux操作中支持。这里创建一个用户专门用来调度此用户必须拥有对函数的执行和访问权限并设免密登录。你也可以使用.pgpass的方式配置用户密码。本问作为job实验使用postgres用户进行操作不再累述此类操作。 使用linux创建定时脚本。
vim postgres_job
并在文件中键入以下内容。 #!/bin/bash
#加载环境变量
. /etc/profile
. ~/.bash_profile# 使用 date 命令获取当前日期
current_date$(date %Y%m%d)# 然后你可以将这个变量作为参数传递给你的脚本或其他命令
#shell对换行敏感如果你需要执行多个函数需要单引号内进行换行
psql -c select export_userlist_to_file($current_date) 在postgres用户下 使用crontab -e 命令编辑postgres的 crontab 文件 在脚本前方的五个位置分别代表不同的含义。
* * * * * (EXECUTE) file - - - - - | | | | | | | | | ----- 星期中星期几 (0 - 6) (星期天 为0) | | | ---------- 月份 (1 - 12) | | --------------- 一个月中的第几天 (1 - 31) | -------------------- 小时 (0 - 23) ------------------------- 分钟 (0 - 59)
0 0 * * * /home/postgres/pg_job 便是指定每天的零点执行/home/postgres/pg_job脚本
启动crond服务
systemctl start crond 注意
在pg_job脚本有增加这样一句加载环境变量
#加载环境变量 . /etc/profile . ~/.bash_profile
因为crontab的特殊情况执行用户和权限不一样读取环境变量也不一样需要指定变量。
pgAgent的job调度 pgAgent是支持图形化页面的所以可以通过pgadmin4为服务器下载pg_agent。安装非常简单 此时在pgadmin4下就可以看到pgagent jobs 了。
远程服务器是10.0.0.199而此时pgAgent安装在本地是要在IP互通的情况下同样可以为远程postgres数据库配置job
右键pgagent创建一个job为其命名为zone_task 如下所示编辑连接信息时会暴露密码此时可以使用.pgpass的配置方法本文重要pgagent的使用不再累述此操作。
host10.0.0.199 port25432 userpostgres dbnamepostgres connect_timeout10 passwordpostgres 这里的种类包含SQL,批次就是我们此批次的脚本使用的语言 这里批次指的是windowsBatch或者linux(shell脚本)可以使用SQL意外的语言再去调度一次SQL脚本本文使用SQL进行编辑。 为该job填入执行代码 点击保存便可在页面上看到这样一个job pgAgent由于支持图形化页面展示所以功能键展示相对较为完善理解更为方便。 在安装完pgAgent后会生成一个shcema名称为pgagent,并在此schema下生成三个函数三个触发器八张表
函数1. pgagent.pga_is_leap_year: 这个函数用于判断一个年份是否是闰年。
2. pgagent.pga_next_schedule: 这个函数用于计算下一个调度时间。
3. pgagent.pgagent_schema_version: 这个函数用于获取pgAgent的模式版本。
表1. pgagent.pga_exception: 这个表用于存储pgAgent在执行任务时遇到的异常。
2. pgagent.pga_job: 这个表用于存储pgAgent的任务信息。
3. pgagent.pga_jobagent: 这个表用于存储pgAgent的任务代理信息。
4. pgagent.pga_jobclass: 这个表用于存储pgAgent的任务类别信息。
5. pgagent.pga_joblog: 这个表用于存储pgAgent的任务日志。
6. pgagent.pga_jobstep: 这个表用于存储pgAgent的任务步骤信息。
7. pgagent.pga_jobsteplog: 这个表用于存储pgAgent的任务步骤日志。
8. pgagent.pga_schedule: 这个表用于存储pgAgent的调度信息。
触发器1. pgagent.pga_exception_trigger(): 这个触发器在pga_exception表中插入或更新数据时触发。
2. pgagent.pga_job_trigger(): 这个触发器在pga_job表中插入或更新数据时触发。
3. pgagent.pga_schedule_trigger(): 这个触发器在pga_schedule表中插入或更新数据时触发。functions
SELECT pgagent.pga_is_leap_year(2020) -- 返回 true因为2020年是闰年
union all
SELECT pgagent.pga_is_leap_year(2021); -- 返回 false因为2021年不是闰年select pgagent.pgagent_schema_version(); --返回pgAgent的版本号是个固定返回值pgagent.pga_next_schedule函数用于计算给定调度的下一个运行时间。它接受8个参数1. jscid: 调度ID
2. jscstart: 调度的开始时间
3. jscend: 调度的结束时间
4. jscminutes: 表示每个分钟是否有效的布尔数组
5. jschours: 表示每个小时是否有效的布尔数组
6. jscweekdays: 表示每个星期几是否有效的布尔数组
7. jscmonthdays: 表示每个月的哪一天是否有效的布尔数组
8. jscmonths: 表示每个月份是否有效的布尔数组函数返回一个时间戳表示下一个运行时间。如果没有下一个运行时间例如调度已经过了其结束日期则返回NULL。
这是一个非常鸡肋的函数 pgagent.pga_next_schedule是一个非常鸡肋的函数字所以没必要关注。 博主也没兴趣举例子。 总的来说这三个函数都没啥作用。 tables
1. pgagent.pga_exception这个表用于存储pgAgent在执行任务时遇到的异常。
- jexid: 异常的唯一标识符
- jexscid: 引发异常的调度的ID
- jexdate: 异常发生的日期
- jextime: 异常发生的时间2. pgagent.pga_job这个表用于存储pgAgent的任务信息。
- jobid: 任务的唯一标识符
- jobjclid: 任务类别的ID
- jobname: 任务的名称
- jobdesc: 任务的描述
- jobhostagent: 任务的主机代理
- jobenabled: 表示任务是否启用的布尔值
- jobcreated: 任务创建的时间
- jobchanged: 任务最后一次修改的时间
- jobagentid: 任务代理的ID
- jobnextrun: 下一次运行的时间
- joblastrun: 上一次运行的时间3. pgagent.pga_jobagent这个表用于存储pgAgent的任务代理信息。
- jagpid: pgagent的进程号
- jaglogintime: 任务代理的登录时间
- jagstation: 任务代理的hostname4. pgagent.pga_jobclass这个表用于存储pgAgent的任务类别信息。
- jclid: 任务类别的唯一标识符
- jclname: 任务类别的名称5. pgagent.pga_joblog这个表用于存储pgAgent的任务日志。
- jlgid: 任务日志的唯一标识符
- jlgjobid: 任务的ID
- jlgstatus: 任务的状态s:成功运行f运行失败
- jlgstart: 任务开始的时间
- jlgduration: 任务的持续时间6. pgagent.pga_jobstep这个表用于存储pgAgent的任务步骤信息。
- jstid: 任务步骤的唯一标识符
- jstjobid: 任务的ID
- jstname: 任务步骤的名称
- jstdesc: 任务步骤的描述
- jstenabled: 表示任务步骤是否启用的布尔值
- jstkind: 任务步骤的类型
- jstcode: 任务步骤的代码
- jstconnstr: 任务步骤的连接字符串
- jstdbname: 任务步骤的数据库名称
- jstonerror: 任务步骤出错时的行为7. pgagent.pga_jobsteplog这个表用于存储pgAgent的任务步骤日志。
- jslid: 任务步骤日志的唯一标识符
- jsljlgid: 任务日志的ID
- jsljstid: 任务步骤的ID
- jslstatus: 任务步骤的状态
- jslresult: 任务步骤的结果
- jslstart: 任务步骤开始的时间
- jslduration: 任务步骤的持续时间
- jsloutput: 任务步骤的输出8. pgagent.pga_schedule这个表用于存储pgAgent的调度信息。
- jscid: 调度的唯一标识符
- jscjobid: 任务的ID
- jscname: 调度的名称
- jscdesc: 调度的描述
- jscenabled: 表示调度是否启用的布尔值
- jscstart: 调度的开始时间
- jscend: 调度的结束时间
- jscminutes: 表示每个分钟是否有效的布尔数组
- jschours: 表示每个小时是否有效的布尔数组
- jscweekdays: 表示每个星期几是否有效的布尔数组
- jscmonthdays: 表示每个月的哪一天是否有效的布尔数组
- jscmonths: 表示每个月份是否有效的布尔数组 注重点关注两张表pgagent.pga_joblogpgagent.pga_jobsteplog。这两张表算是使用频率比较高的了。
kettle也称为 Pentaho Data Integration kettle同样也支持图形化界面上手较为简单支持跨库之间的协同。也支持复杂的流控制有较多控件支持。 新建一个测试函数用于讲解kettle在参数传递过程中的使用
##创建一个测试函数
create or replace function main.text_log(v_date date,v_var varchar)
RETURNS void AS $$
BEGINinsert into main.log(load_time,name) values(v_date,测试成功||v_var);
END;
$$ LANGUAGE plpgsql; 创建一个转换 这里的参数传递需要和 函数参数的为的前后顺序对应 测试运行 执行成功后将该转换配置为job 在start控件中可以调整任务调度的间隔信息同时在kettle中也有很多控件可以满足我们大多数情况的复杂调度的需求。 只要以下该页面一直挂着start设置的重复频率就有效。 在windows中该页面需要一直打开状态才可以保持start控件的重复频率有效也可以使用windows自带的任务计划程序在linux中可以设置该程序的后台进行。
在windows中将该job设置为任务 使用任务计划程序start的重复频率便会失效。job在被调用一次执行一次成功之后便会退出。需要设置触发器使其job被多次调用。 pg_cron pg_cron是基于cron的作业调度插件语法与常规cron相同但它可以直接从数据库执行PostgreSQL命令。相较于前面得几个例子安装pg_cron需要重启数据库,其功能性较为轻便化不支持跨库处理不支持复杂的控制流处理。
安装pg_cron 这个github上搜索就好了
unzip pg_cron-main
cd pg_cron-main
make make install 额外得参数配置
#动态链接库
shared_preload_librariespg_cron
#任务运行库
cron.database_name postgres 其实重启数据库
执行创建 extensioncreate extension pg_cron ;
会生成一个cron得schema,并在该schema下生成 六个函数两张表 function
#创建一个task
cron.schedule(job_name text,schedule text,command text)
#创建一个名为job_namede 作业每天十点整执行一次insert 语句
select cron.schedule(job_name,0 10 * * *,insert into main.log(name) values(export_userlist_to_file);)#在不定义job_name 得情况下也可以创建一个job会cron.schedule(schedule text,command text)#用来修改已经存在的定时任务的属性例如修改任务的执行计划、执行的命令、执行的数据库、执行的用户和是否激活任务。 cron.alter_job(job_id bigint,schedule text DEFAULT NULL::text,command text DEFAULT NULL::text,database text DEFAULT NULL::text,username text DEFAULT NULL::text,active boolean DEFAULT NULL::boolean)
#修改job_id为1得其执行时间改为每天得十一点整,执行语句不变执行数据库改为postgres执行用户改为postgres任务活跃状态不变。
select cron.alter_job(1,0 11 * * *,,postgres,postgres,)#确定一个特定的作业是否应该在当前数据库中调度。cron.schedule_in_database(job_name text,schedule text,command text,database text,username text DEFAULT NULL::text,active boolean DEFAULT true)#使得job失效可以通过job_id,job_Name 进行传参cron.unschedule(job_id bigint)cron.unschedule(job_name text)#使job_id 为1 job_name 为job_name 得job不再运行
select cron.unschedule(1);
select cron.unschedule(job_name);
tables
1. cron.job这个表用于存储定时任务的信息。
- jobid: 任务的唯一标识符
- schedule: 任务的调度时间使用cron语法
- command: 要执行的命令
- nodename: 节点名称默认为localhost
- nodeport: 节点端口默认为当前服务器的端口
- database: 要在其中执行命令的数据库默认为当前数据库
- username: 要执行命令的用户默认为当前用户
- active: 表示任务是否激活的布尔值默认为true
- jobname: 任务的名称
- job_pkey: 主键约束基于jobid
- jobname_username_uniq: 唯一约束基于jobname和username2. cron.job_run_details这个表用于存储定时任务的运行详情。
- jobid: 任务的唯一标识符
- runid: 运行的唯一标识符
- job_pid: 任务的进程ID
- database: 在其中执行命令的数据库
- username: 执行命令的用户
- command: 执行的命令
- status: 任务的状态
- return_message: 返回的消息
- start_time: 任务开始的时间
- end_time: 任务结束的时间
- job_run_details_pkey: 主键约束基于runid
每一个定时任务分为两部分
定时计划 规定使用插件的计划例如每隔1分钟执行一次该任务。
定时计划使用标准的cron语法其中*表示任意时间都运行特定数字表示仅在这个时间时运行。
* * * * * (schedule) - - - - - | | | | | | | | | ----- 星期中星期几 (0 - 6) (星期天 为0) | | | ---------- 月份 (1 - 12) | | --------------- 一个月中的第几天 (1 - 31) | -------------------- 小时 (0 - 23) ------------------------- 分钟 (0 - 59)
测试
创建一个测试函数 CREATE OR REPLACE FUNCTION main.cron_text(v_dt varchar)RETURNS voidLANGUAGE plpgsqlCOST 100VOLATILE PARALLEL UNSAFE
AS $BODY$
declare v_dt1 date ;
BEGIN
v_dt1 :cast($1 as date);insert into main.log(load_time,name) values(v_dt1,cron测试);
END;
$BODY$;创建一个调度
每天十点执行select main.cron_text(cast(current_date as varchar)) 指令
select cron.schedule(0 10 * * *,select main.cron_text(cast(current_date as varchar))) 创建完成后可以在cron_job 中看到此时因为在创建作业得时候并没有设置job_name所以此时job_Name 会是空值 修改刚刚定义得job 使其每五分钟运行一次
select cron.alter_job(1,*/5 * * * *); 可以看到修改成功 查看job运行状态
select * from cron.job_run_details;pg_timetable pg_timetable是一个功能十分全面的job调度工具支持Windows、Linux 和 macOS 软件包可用。官方给出了 基础作业中支持
Sleep延迟睡眠Log日志记录SendMail邮件发送Download数据加载 在控制流中支持
Download files from a server文件加载Import files导入文件Run aggregations聚合运算Commit the transaction事务提交Remove the files from disk磁盘文件清理 个人觉得功能在以上五个工具中是仅次于kettle的存在。正因为如此在复杂的作业流制定中其运维也是一个十分麻烦的存在。
pg_timetable安装 pg_timetable源码安装采用go进行构建需要安装GO在运行的系统中。也可以直接下载pg_timetable_4.5.0_Linux_x86_64.tar.gz 直接解压运行 安装go
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz go支持列表
go1.21.4.linux-amd64.tar.gz: 这个压缩包适用于 x86_64 架构的 Linux 系统。go1.21.4.linux-arm64.tar.gz: 这个压缩包适用于 arm64 架构的 Linux 系统例如 Raspberry Pi。go1.21.4.linux-armv6l.tar.gz: 这个压缩包适用于 armv6l 架构的 Linux 系统。go1.21.4.linux-386.tar.gz: 这个压缩包适用于 i386 架构的 Linux 系统。
使用后指令确认计算机系统的架构
uname -m 解压 rm -rf /usr/local/go tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz增加环境变量
export PATH$PATH:/usr/local/go/bin srouce /etc/profile ##测试安装是否完成
go version源码安装pg_timetable 下载程序包并使用go语言进行编译 git clone https://github.com/cybertec-postgresql/pg_timetable.gitcd pg_timetablego run main.go --dbnamepostgres --clientnametimetable --userpostgres --passwordpostgres
dbname: 这是数据库名称程序需要知道连接到哪个数据库所以需要预先定义好。clientname: 客户端名字可以随便定义一般用于标识不同的客户端实例。在数据库中会生成同名的schemauser: 用户名需要预先在数据库中创建这个用户并设置好权限。password: 密码也需要预先设置好用于登录数据库。
go build./pg_timetable --dbnamepostgres --clientnametimetable --port35432 --userpostgres --passwordpostgres
注在go编译过程中需要下载一些依赖包会出现connection refused的情况。
tar 安装
wget https://github.com/cybertec-postgresql/pg_timetable/releases/download/v5.6.0/pg_timetable_Linux_x86_64.tar.gz
解压
tar -zxvf pg_timetable_Linux_x86_64
sudo mv pg_timetable_Linux_x86_64 /usr/local/pg_timetable
sudo vim /etc/profile
export PATH/usr/local/pg_timetable:$PATH
source /etcprofile
#测试
pg_timetbale --help
启动进程
pg_timetable --dbnamepostgres --clientnametimetable --userpostgres --passwordpostgres[postgresvm03 contrib]$ pg_timetable --dbnamepostgres --clientnametimetable --userpostgres --passwordpostgres --port35432
2023-11-12 22:42:57.935 [INFO] [sid:710227833] Starting new session...
2023-11-12 22:42:57.941 [INFO] Database connection established
2023-11-12 22:42:57.949 [INFO] Executing script: Schema Init
2023-11-12 22:42:58.033 [INFO] Schema file executed: Schema Init
2023-11-12 22:42:58.033 [INFO] Executing script: Cron Functions
2023-11-12 22:42:58.072 [INFO] Schema file executed: Cron Functions
2023-11-12 22:42:58.072 [INFO] Executing script: Tables and Views
2023-11-12 22:42:58.125 [INFO] Schema file executed: Tables and Views
2023-11-12 22:42:58.126 [INFO] Executing script: JSON Schema
2023-11-12 22:42:58.146 [INFO] Schema file executed: JSON Schema
2023-11-12 22:42:58.146 [INFO] Executing script: Job Functions
2023-11-12 22:42:58.164 [INFO] Schema file executed: Job Functions
2023-11-12 22:42:58.164 [INFO] Configuration schema created...
2023-11-12 22:42:58.177 [INFO] Accepting asynchronous chains execution requests...
2023-11-12 22:42:58.189 [INFO] [count:0] Retrieve scheduled chains to run reboot
2023-11-12 22:42:58.210 [INFO] [count:0] Retrieve scheduled chains to run
2023-11-12 22:42:58.211 [INFO] [count:0] Retrieve interval chains to run此时在数据库中可以看到创建一个timetable的schema 例子
此时在压缩包中自带一些对功能讲解的范例
/usr/local/pg_timetable/samples
自行实操不再累述 文章转载自: http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.lekbiao.com.gov.cn.lekbiao.com http://www.morning.nrqtk.cn.gov.cn.nrqtk.cn http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn http://www.morning.wxccm.cn.gov.cn.wxccm.cn http://www.morning.gqcd.cn.gov.cn.gqcd.cn http://www.morning.njfgl.cn.gov.cn.njfgl.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.ptslx.cn.gov.cn.ptslx.cn http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn http://www.morning.nzsx.cn.gov.cn.nzsx.cn http://www.morning.hxlpm.cn.gov.cn.hxlpm.cn http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn http://www.morning.pxbrg.cn.gov.cn.pxbrg.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.mrskk.cn.gov.cn.mrskk.cn http://www.morning.qkbwd.cn.gov.cn.qkbwd.cn http://www.morning.pbdnj.cn.gov.cn.pbdnj.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.tntgc.cn.gov.cn.tntgc.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn http://www.morning.lffrh.cn.gov.cn.lffrh.cn http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn http://www.morning.tpps.cn.gov.cn.tpps.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.yyzgl.cn.gov.cn.yyzgl.cn http://www.morning.fldk.cn.gov.cn.fldk.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.ygqjn.cn.gov.cn.ygqjn.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.gjfym.cn.gov.cn.gjfym.cn http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.cfnht.cn.gov.cn.cfnht.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.nhbhc.cn.gov.cn.nhbhc.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn http://www.morning.rxfjg.cn.gov.cn.rxfjg.cn http://www.morning.rmkyb.cn.gov.cn.rmkyb.cn http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.bygyd.cn.gov.cn.bygyd.cn http://www.morning.bxch.cn.gov.cn.bxch.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.nlcw.cn.gov.cn.nlcw.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.rggky.cn.gov.cn.rggky.cn http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.cwqpl.cn.gov.cn.cwqpl.cn http://www.morning.gydsg.cn.gov.cn.gydsg.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn http://www.morning.jtmql.cn.gov.cn.jtmql.cn http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn http://www.morning.kqglp.cn.gov.cn.kqglp.cn