部署xxl-job定时任务系统
code
缘由
定时任务系统是非常实用的,简单到每天的爬虫、发送提醒之类的任务
首选是xxl-job,稳定。下面教程在服务器部署它
部署xxljob
本例子服务器使用系统是CentOS7
xxl-job是Java项目依赖于java11、maven,先要安装
安装java11
# 查看旧版本java
rpm -qa |grep java
# 删除旧版本java
yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
# 安装java11
yum install -y java-11-openjdk
# 查看java版本
java -version
# 查看open jdk安装在了哪里
which java
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
# 上面这句的结果复制到下面使用
/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java
# 配置环境变量
vim /etc/profile
# 在最底添加
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
安装maven
# 查看是否有maven
ls /usr/local
# 创建maven文件夹
mkdir /usr/local/maven
# 进入maven文件夹
cd /usr/local/maven
# 下载maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.zip
# 解压maven
unzip apache-maven-3.9.4-bin.zip
# 配置maven环境变量
vim /etc/profile
# 添加这两行
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.4
export PATH=${MAVEN_HOME}/bin:${PATH}
# 重启环境变量
source /etc/profile
# 验证安装成功
mvn -v
部署xxljob调度器
# 找个位置,拉取xxl项目
git clone https://github.com/howie110/xxl-job-example.git
# 初始化数据库,把xxl项目/sql/tables_xxl_job.sql内容复制到你的mysql运行
# 部署
cd xxl-job-example
# 填写docker-compose.yaml里面的数据库IP账号密码
docker compose up -d
部署xxljob执行器
# mvn打包pom.xml成为执行器,完成后有target文件夹。这句打包太慢了,可以在windows打包生成.jar文件再上传
mvn clean package
# 启动执行器
nohup java -jar target/xxl-job-example-1.0.0.jar >/dev/null 2>&1 &
使用xxljob
登陆xxl管理页面
http://IP:7070/xxl-job-admin
user/pwd: admin/123456
新增一个执行器,名字AppName: xxl-job-example-executor
新建任务
GLUE(Python)配置
我后端使用的是docker部署的django项目,下面这个是直接调用执行镜像里面的代码。这一步需要根据自己实际情况调整
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import subprocess
funcname = eval(sys.argv[1])[0]
def execute_docker_command():
# 构建 Docker 命令
docker_command = "docker exec django_cicd_docker-web-1 python /app/xxl_job_python_shell.py \"['%s']\""%funcname
# 执行 Docker 命令
result = subprocess.call(docker_command, shell=True)
# 返回执行的状态码(0 表示成功,非 0 表示失败)
return result
# 调用执行 Docker 命令的函数
execute_docker_command()
进阶学习
docker部署调度器执行器
Docker
分布式任务调度平台XXL-JOB