脚本分为主程序和执行程序。主程序叫main,执行程序叫做component.sh。
1.下载: https://gitee.com/argor/main
3.说明文档
-
简介:启动 jar 包。 版本:v2.7 脚本功能: main - 主程序,放到 $PATH 下执行就行。 管理所有 jar 包的运行、停止……。 component.sh - 执行程序,放到需要发布的 jar 包同级目录。 执行同级目录下 jar 包的实际操作。 脚本输出信息: 蓝色字体:执行的目标 黄色字体:进程 pid 白色字体:提示信息 红色字体:执行的动作 部署要求: 1.修改 main 的变量 PUBLISHDIR,指向希望部署的目录。 eg:PUBLISHDIR=/test 2.执行程序,在启动程序时,注意开发环境、测试环境命令。默认使用测试环境命令。 生产环境:附带启动参数 启动参数,按照实际情况自行修改变量:JVM_OPTS、SERVER_OPTS、LIST_PORT。 测试环境:直接启动jar包,仅仅附带日志指定。 修改环境:搜索标记Prod,Deve。 生产环境监听的端口由变量 LIST_PORT 指定。 测试环境监听的端口由 jar 包内配置决定。 环境仅仅影响启动、重启,不影响停止、查看执行状态。 eg: EXEC_ENV="Deve" LIST_PORT="7003" 3.【创建部署目录名】 在 PUBLISHDIR 下创建希望发布的应用的目录,放入对应的 jar 包。 建议:目录名称跟 jar 主文件名一致。 目录只创建一级,为了不会同名。 以部署目录名为主,jar 包主文件要是不愿意一致的情况下,不要跟所有的【部署目录名】存在字符的包含关系。 4.把执行程序放入 jar 包的同级目录。 注意:部署时,文件扩展名不可以修改,必须以 .sh 结尾。 5.可选项目 把 REAEDME 拷贝到 ~/.mainrc 下,以获取帮助。 main 使用语法: main [option parameter] [...] main 直接执行,把所有的 jar 都启动。(已启动就显示正在运行,未启动就实际启动) main -t app1 启动 app1 main -r app4 重启 app4 main -R 全部重启 main -avS 显示版本,显示作者,显示所有 jar 包执行状态。 main 可接受的选项: t 启动 s 查看执行状态 p 停止 r 重启 R 重启全部 S 查看全部的执行状态 T 启动全部 P 停止全部 v 版本信息 a 作者 h 获取帮助信息 选项接受的参数:(参数就是部署目录名) 1.建议使用应用部署时的【部署目录名】,同时建议与 jar 包主文件名一致。 2.部署目录名之间不存在 字符上 的包含关系。因为 main 主程序在执行操作时是以搜索的方式去匹配对应的应用。 3.当部署目录名可以是多级目录,但是不建议。 4.部署目录名在确定差异足够的情况下,可以简写。 5.简写时,比如 example,可以写 ex,只要其他目录没有包含 ex 字符的目录或文件,或 jar 包。 6.简写时,比如 example,不可以写成 exple。 7.建议写全。 component.sh 说明: 1.该脚本可以独立执行,启动同级目录下的 jar 包。 2.注意:同级目录下只能有一个 jar 包。准备点描述,只能有一个扩展名为“.jar”的文件。 接受的参数: 1.参数仅包括:start,stop,status,restart。 2.必须以 root 用户运行。 正常执行情况下的报错: 1.执行命令“main”,无任何显示,表示目标目录里没有对应【部署目录名】,或者【部署目录名】中没有对应的 component.sh 执行文件。 或者 component.sh 没有执行属性。 2.提示红色:Can't find jar to running. 【部署目录名】下没有 jar 包。 其他: 1.main 程序允许一次执行多个操作。比如同时启动 app1、停止 app3……。 eg:main -t app1 -s app2 -p app3 -r app4 2.全部启动、重启…… eg: main main -R main -P 3.已知未解决的问题: 当写的选项参数【部署目录名】,不存在时,会报错。 脚本没有对任何使用的 shell 命令做存在校验,要是不存在,程序执行会受影响。 脚本在执行时,遇见错误,有可能会继续完成后续非法操作。请谨慎使用。 输入错误的选项,提示选项不正确。当连续输入相同的错误选项,会有多次提示。(正确同) 4.程序需要以 root 身份运行 5.选项允许合并 命令依赖: tree,grep,echo,getopts,dirname,ls,ps,awk,nohup,sleep,kill,java,以及一些 bash 内置命令。