Opencron 介绍
一个功能完善真正通用的linux定时任务调度定系统,满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控,webssh,提供一个方便管理定时任务的平台.
你是否有定时执行任务计划的需求,需要在linux的crontab里一一定义任务?
- 需要在每台linux服务器的crontab里一一定义任务
- 任务的执行监控太不方便了
- 得登录到每台机器查看定时任务的运行结果,机器一多简直是一种灾难
- 对于多台机器协同处理一个任务很麻烦,如何保证多台机器上的任务按顺序依次执行?
- 当任务运行失败,要重新执行,还得重新定义下执行时间,让其重跑,重跑完成了还得改回正常时间
- 正在运行的任务要kill掉很麻烦,查看进程然后才能kill
......opencron的出现将彻底的解决上面所有问题.功能如下:
- 自动化管理任务,提供可操作的web图形化管理
- 要当场执行只需点击执行即可,非常方便
- 时间规则支持quartz和crontab,更强大更灵活
- 非常方便的修改任务的执行时间
- 任务的运行状态实时查看
- 支持任务kill(包括由当前任务调起的其他子任务链,彻底kill)
- 支持重新执行正在运行的任务
- 出错后实时通知给任务人(超过重跑次数自动发送邮件,短信)
- 支持任务超时设置,一旦超过预定运行时长自动kill,任务结束,防止僵尸任务
- 支持流程任务(多台机器上协同完成一个大的任务,按任务分配的顺序依次执行每台机器上的任务)
- 记录任务的运行日志,非常方便查看
- 多用户多角色
- 现场执行(选择N台机器同时执行一个命令或任务)
- webssh,在浏览器一键ssh登录到linux服务器
- 提供服务器的性能实时监控
安装opencron 需要jdk1.7 或者更高的版本 & tomcat环境支持
opencron-agent 部署安装
下载源码
[root@cm-vpn1 ~]# cd /usr/local/src/
[root@cm-vpn1 src]# git clone https://github.com/wolfboys/opencron.git
Cloning into 'opencron'...
remote: Counting objects: 5168, done.
remote: Total 5168 (delta 0), reused 0 (delta 0), pack-reused 5168
Receiving objects: 100% (5168/5168), 6.77 MiB | 1.88 MiB/s, done.
Resolving deltas: 100% (2396/2396), done.
执行sh build编译
说明:编译报错没有安装maven
[root@cm-vpn1 ~]# cd /usr/local/src/
[root@cm-vpn1 src]# cd opencron/
[root@cm-vpn1 opencron]# ls
agent.sh build.sh checkstyle.xml header.txt LICENSE.txt opencron-agent opencron-common opencron-server pom.xml README.md server.sh
[root@cm-vpn1 opencron]# sh build.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
[opencron] WARNING:maven is not install!
[opencron] download maven Starting...
[opencron] checking network connectivity ...
[opencron] network is connectioned,download maven Starting...
--2018-06-12 02:02:34-- http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
Resolving mirror.bit.edu.cn (mirror.bit.edu.cn)... 2001:da8:204:2001:250:56ff:fea1:22, 202.204.80.77
Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|2001:da8:204:2001:250:56ff:fea1:22|:80... failed: Connection timed out.
Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|202.204.80.77|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2018-06-12 02:04:44 ERROR 404: Not Found.
[opencron] build opencron Starting...
build.sh: line 225: clean: command not found
[opencron] build opencron failed! please try again
安装maven
[root@cm-vpn1 src ]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
[root@cm-vpn1 src ]# tar -xvf apache-maven-3.5.3-bin.tar.gz
[root@cm-vpn1 src ]# mv apache-maven-3.5.3 /usr/local/maven
配置maven 环境变量
[root@cm-vpn1 ~]# vim /etc/profile
*************
*************
*************
export MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin
编译完成的文件在/usr/local/src/opencron 目录下有会生成dist目录
说明:部署agent,将opencron-agent-1.1.0-RELEASE.tar.gz包拷贝到要管理任务的目标服务器,解包后会看到以下目录
root@li1016-179 ~]# cd /usr/local/src/
[root@li1016-179 src]# ls
opencron-agent-1.1.0-RELEASE.tar.gz s3cmd-2.0.1.tar.gz
[root@li1016-179 src]# tar -xvf opencron-agent-1.1.0-RELEASE.tar.gz
[root@li1016-179 src]# cd opencron-agent
[root@li1016-179 opencron-agent]# ls *
bin:
kill.sh monitor.sh opencron.sh setclasspath.sh shutdown.sh startup.sh
conf:
conf.properties log4j.properties
lib:
commons-cli-1.4.jar freemarker-2.3.20.jar junit-4.11.jar netty-handler-4.1.5.Final.jar protostuff-collectionschema-1.0.12.jar
commons-codec-1.10.jar hamcrest-core-1.3.jar libthrift-0.10.0.jar netty-resolver-4.1.5.Final.jar protostuff-core-1.0.12.jar
commons-exec-1.3.jar HikariCP-java6-2.3.13.jar log4j-1.2.16.jar netty-socketio-1.7.12.jar protostuff-runtime-1.0.12.jar
commons-io-2.4.jar httpclient-4.5.3.jar maven-model-3.0.jar netty-transport-4.1.5.Final.jar quartz-2.3.0.jar
commons-lang-2.4.jar httpcore-4.4.1.jar mchange-commons-java-0.2.11.jar netty-transport-native-epoll-4.1.5.Final.jar slf4j-api-1.7.21.jar
commons-lang3-3.1.jar jackson-annotations-2.9.0.jar netty-buffer-4.1.5.Final.jar opencron-agent-1.1.0-RELEASE.jar slf4j-log4j12-1.7.21.jar
commons-logging-1.1.1.jar jackson-core-2.9.2.jar netty-codec-4.1.5.Final.jar opencron-common-1.1.0-RELEASE.jar
cron4j-2.2.5.jar jackson-databind-2.9.2.jar netty-codec-http-4.1.5.Final.jar plexus-utils-2.0.4.jar
fastjson-1.2.31.jar jackson-module-jaxb-annotations-2.9.2.jar netty-common-4.1.5.Final.jar protostuff-api-1.0.12.jar
logs:
temp:
启动opencron-agent
说明:进入opencron-agent/bin
说明:这里可以接受两个参数,分别是服务启动的端口和密码,默认端口是:1577,默认密码:opencron 如要指定参数启动命令如下
[root@li1016-179 ~ ]#/usr/local/src/opencron-agent/bin
[root@li1016-179 bin]# sh startup.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
[opencron] Using OPENCRON_BASE: /usr/local/src/opencron-agent
[opencron] Using OPENCRON_HOME: /usr/local/src/opencron-agent
[opencron] Using OPENCRON_TMPDIR: /usr/local/src/opencron-agent/temp
[opencron] Using JRE_HOME: /usr/local/jdk1.8
[opencron] Using CLASSPATH: /usr/local/src/opencron-agent/lib/opencron-agent-1.1.0-RELEASE.jar
[opencron] Using OPENCRON_PID: /usr/local/src/opencron-agent/opencron.pid
[opencron] opencron port not input,will be used port:1577
[opencron] opencron password not input,will be used password:opencron
[opencron] opencron started.
停止opencron-agent
[root@li1016-179 bin]# sh shutdown.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
[opencron] Using OPENCRON_BASE: /usr/local/src/opencron-agent
[opencron] Using OPENCRON_HOME: /usr/local/src/opencron-agent
[opencron] Using OPENCRON_TMPDIR: /usr/local/src/opencron-agent/temp
[opencron] Using JRE_HOME: /usr/local/jdk1.8
[opencron] Using CLASSPATH: /usr/local/src/opencron-agent/lib/opencron-agent-1.1.0-RELEASE.jar
[opencron] Using OPENCRON_PID: /usr/local/src/opencron-agent/opencron.pid
Error: Could not find or load main class org.opencron.agent.AgentBootstrap
[opencron] The stop command failed. Attempting to signal the process to stop through OS signal.
[opencron] opencron stopped.
opencron-server 部署步骤
创建opencron库 &授权
[root@cm-vpn1 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 632
Server version: 5.6.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database opencron;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on opencron.* to root@207.109.42.12 identified by 'root';
Query OK, 0 rows affected (0.00 sec)
配置opencron server
说明:修改数据库密码 & IP
[root@cm-vpn1 ~ ]# vim /usr/local/src/opencron/dist/opencron-server/WEB-INF/classes/config.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://207.109.42.12:3306/opencron?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
#hibernate
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=false
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
hibernate.cache.provider_class=net.sf.ehcache.hibernate.EhCacheProvider
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
hibernate.cache.use_second_level_cache=false
hibernate.cache.use_query_cache=false
jdbc.use_scrollable_resultset=false
#单一登陆,同一用户只能在一处登陆,如多处登陆,后登陆的会把前面已经登陆的统统踢下线(为了安全考虑,默认是true,即不允许多段同时登陆)
opencron.singlelogin=true
#agent端自动注册的key
opencron.autoRegKey=opencron@2016
#agent监控服务端口
opencorn.monitorPort=17502
启动opencron server服务
说明:第一次部署执行server.sh. 报没java环境
[root@cm-vpn1 ~ ]# cd /usr/local/src/opencron
[root@cm-vpn1 opencron-server]# sh server.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
[opencron] Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
[opencron] At least one of these environment variable is needed to run this program
解决
[root@cm-vpn1 opencron]# vim server.sh
#!/bin/bash
#echo color
WHITE_COLOR="\E[1;37m";
RED_COLOR="\E[1;31m";
BLUE_COLOR='\E[1;34m';
GREEN_COLOR="\E[1;32m";
YELLOW_COLOR="\E[1;33m";
RES="\E[0m";
#指定java 路径
export JAVA_HOME='/usr/local/jdk1.8'
export JRE_HOME='/usr/local/jdk1.8/jre'
*******************
*******************
重新执行
[root@cm-vpn1 opencron]# sh server.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
***************************************************
***************************************************
***************************************************
查看监听端口
#监听端口8080
[root@cm-vpn1 opencron]# !net
netstat -nvlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 31062/sshd
tcp 0 0 0.0.0.0:600 0.0.0.0:* LISTEN 14174/python
tcp6 0 0 :::3306 :::* LISTEN 7534/mysqld
tcp6 0 0 :::8080 :::* LISTEN 8093/java
tcp6 0 0 :::22 :::* LISTEN 31062/sshd
启动 opencron
说明:第一次部署是执行server.sh,当部署成功后,启动是执行/usr/local/src/opencron/dist/opencron-server/startup.sh
[root@cm-vpn1 opencron-server]# sh startup.sh
--------------------------------------------
/ \
/ ___ _ __ ___ _ __ ___ _ __ ___ _ __ \
/ / _ \| '_ \ / _ \ '_ \ / __| '__/ _ \| '_ \ \
/ | (_) | |_) | __/ | | | (__| | | (_) | | | | \
\ \___/| .__/ \___|_| |_|\___|_| \___/|_| |_| /
\ |_| /
\ /
\ --opencron,Let's crontab easy! /
--------------------------------------------
[opencron] server Starting....
[opencron] please see log for more detail: /usr/local/src/opencron/dist/opencron-server/work/logs/opencron.out
网页访问
第一次访问登录默认用户和密码是opencron,并且会提示修改密码