pgAgent定时器完整适合小白


前言

现在目前有很多数据库都自带了定时器(比如oracle,开源界的postgres,等等一些),那么具体的目的是为了跟服务器独立隔离(服务器也有定时任务可以直接用,如果万一有那天我数据库搬家了呢搬到其他的服务器上了呢注意操作系统不同)所有为了后续的迁移维护做准备!把定时器全部由postgres管理。

一、PgAgent是什么?

跟quarzt差不多的一个定时器架构,区别PgAgent是个插件针对于postgres数据库,quarzt是套框架针对于项目。

二、安装步骤

1.导入安装源(安装指定要不然找不到安装包)、 适用范围: CentOS CentOS 7.x(其他的自己去改红帽源EL-7-x86_64改成别的) PostgreSQL 9.x-12.x

具体源可以去官网找,我这边导过了就不在导了
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
复制代码

2.先装个pgadmin把为了比较好操作一点(可视化界面),不想要这东西也可以直接安装pgAgent(所在数据库中的模式安装了此插件会有一个pgagent模式自己去里面操作sql好了) 这里为了更加简单客观更好理解用可视化咯 注意:pgadmin采用python开发

安装python环境:3.6.0-内部使用3.4.0向下兼容版本开发
检查是否有 GCC:依赖
gcc --version # 查看gcc版本
# 若没有输出,执行安装命令
yum  -y install gcc
复制代码

在这里插入图片描述

安装依赖:
如果不安装依赖,在安装 Python 的时候会报错
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
复制代码

在这里插入图片描述

yum -y groupinstall "Development tools"
复制代码

在这里插入图片描述

yum install -y libffi-devel zlib1g-dev
复制代码

在这里插入图片描述

yum install zlib* -y
复制代码

在这里插入图片描述

重点:安装最新版3.9.1(由于GCC编译器版本太低不支持,升级版本时间太久40多分钟安装,所以还是降低版本为3.6.0)

yum在线安装:

设置源:
yum install epel-release
yum install https://repo.ius.io/ius-release-el7.rpm
也可以使用离线安装(自己去下载压缩包安装)
创建软连接:
ln -s /bin/python3.6 /bin/python3
复制代码
在线安装pip:
yum install python36u-pip
创建软连接:
ln -s /bin/pip3.6 /bin/pip3
复制代码

python3.6.0安装完成


安装pgadmin4
下载pgadmin(目前最新版4.28)
直接下载pip就行(到时候直接用pip包管理工具安装)
wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v4.28/pip/pgadmin4-4.28-py3-none-any.whl
复制代码

在这里插入图片描述

使用包管理工具安装pgadmin4
没有安装一下:yum install python3-pip

创建 pgAdmin4 的项目目录
mkdir -p /opt/pgadmin
创建 pgAdmin4 的数据目录
mkdir -p /var/lib/pgadmin
创建 pgAdmin4 的日志目录
mkdir -p /var/log/pgadmin
创建虚拟环境
cd /opt/pgadmin
python3.6m -m venv venv
激活虚拟环境
source venv/bin/activate
安装 pgAdmin4 使用清华大学的 pip 镜像
pip install pgadmin4-4.28-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码

在这里插入图片描述

改下配置文件config.py参数DEFAULT_SERVER = '0.0.0.0'
要不然项目内部会拦截这个ip
复制代码

在这里插入图片描述 在这里插入图片描述

设置个人信息:python3 /opt/pgadmin/venv/lib/python3.6/site-packages/pgadmin4/setup.py
复制代码

在这里插入图片描述

启动: nohup python3 pgAdmin4.py &
这种启动适合演示(生产下还是不要使用这种开发服务器启动)
可以使用外置的httpd或者uwsgi容器部署(一般的话人少随便弄弄还好吧)
需要部署的可以自己网上找(注意uwsgi可以单跑不一定要跟nginx搭配)
复制代码

在这里插入图片描述在这里插入图片描述 到此pgadmin4最新版安装完毕了


开始安装pgAgent定时插件

搜索模块插件
yum search pgagent
复制代码

在这里插入图片描述

12的所以就安装12 基于86架构进阶的64位
yum install pgagent_12.x86_64
复制代码

在这里插入图片描述

创建postgres数据库中的PGAgent模式(就算专门存储当前数据库定时器信息的咯)
psql -U postgres -d postgres -h 10.1.200.116 -p 5432 -f /usr/share/pgagent_12-4.0.0/pgagent.sql -W
复制代码

在这里插入图片描述

后台启动定时器(就算执行任务的进程咯)
/usr/bin/pgagent_12 -s /usr/pgsql-12/log/pgagent12.log hostaddr=10.1.200.116 port=5432 dbname=postgres user=postgres password=123456
复制代码

在这里插入图片描述 到此为此pgAgent安装完毕咯 在这里插入图片描述


开始配置定时任务 注意:pgAgent 计划任务跟步骤是多对多关系

创建pgAgent任务
参考:点击下面?即可
复制代码

在这里插入图片描述

常规:
	名称:demo1
	是否启动:yes
	作业类型:日常维护(随便乱选一个就好这就是一个分类)
	主机代理:指定那台主机可以运行我这个任务(就是给你的pgagent实例一个判断条件),不选所有主机都可以运行这个任务
	注解:随便乱填
复制代码

在这里插入图片描述

步骤:
	常规->
	名称:step1
	启用:yus
	种类:sql(选批处理,对应code那边些批处理路径就行:注意linux权限问题)
	连接类型:本地
	数据库:postgres
	出现错误:fail
	注解:随便乱填
复制代码

在这里插入图片描述

根据自己需求-需不需要
连接字符串:可以远程连接数据库执行任务(只有sql可以远程然后连接类型选中远程)
host=10.1.200.116 port=5432 dbname=postgres user=postgres password=123456  connect_timeout=10
复制代码

在这里插入图片描述

	代码->
	begin;
	insert into public.demo values('1234567890');
	end;
	最好加个事务(失败了不会执行成功)
复制代码

在这里插入图片描述

根据需求场景选择-这里是个例子
常规->
对应批处理配置:
复制代码

在这里插入图片描述

代码->
写对应批处理的路径:/var/lib/test.sh
复制代码

在这里插入图片描述

计划任务
	常规->
	名称:job1
	启用:yes
	起始值:2020-12-02 11:32:51 +08:00
	结束:不填无限执行
	注释:随便乱填
复制代码

在这里插入图片描述

重复->
小时跟分钟全选了(每分钟执行一次)
这边就是正常的可视化cron表达式
用过的都会了不会的点击?
复制代码

在这里插入图片描述

异常->
	这里是设置某个时间点不会执行任务(就是这个时间点有异常不执行任务)
	2020-12-02 12:50分钟不执行这个任务
	我这边没设置有需求的可以试一下(这边只是演示)
复制代码

在这里插入图片描述

执行成功
可以执行crud-Sql吧
复制代码

在这里插入图片描述

注意事项(重点):

后期维护调试面板
1.运行信息维护
复制代码

在这里插入图片描述

2.任务日志查看
复制代码

在这里插入图片描述

在补充一点吧,之前我说没必要安装这个pgadmin也可以使用(其实吧只需要摸清楚pgadmin里面的
定时器生成规则自己也可以手动直接在pgagent模式下直接操作sql使用)
复制代码

在这里插入图片描述 在这里插入图片描述 超级重点:

经过我的测试发现好像pgagent实例运行sql时不支持中文|
只要代码区域写了sql中有中文的就日志状态就是正在运行中|
注意一般正在运行中就是你sql执行出错了|
如果是任务连接信息不对反正就是定时器这个顶级出错了直接执行失败内部出错就是正在运行中|
复制代码

在这里插入图片描述 在这里插入图片描述

可以看到然并软,并没有删除掉
复制代码

在这里插入图片描述

补充:
	作业状态
	r=运行中
	s=成功完成
	f=失败
	i=没有要执行的步骤
	d=中止
复制代码

总结

一般来说这里不能执行中文可能是pgagent实例那边的问题 其实还好一般正常的使用都是写个postgresql函数(也称存储过程)然后直接 调用存储过程就好了。教程完毕咯

Guess you like

Origin juejin.im/post/7075275642861781023