- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
在日常开发和运维工作中,管理基于Java的应用程序是一项基础且频繁的任务。本文将通过一个示例脚本,展示如何利用Shell脚本简化这一流程,实现Java应用的一键式启动、停止与重启操作。本脚本不仅提升了工作效率,还确保了操作的标准化与可靠性.
这是一个典型的Java项目部署结构,其中user_defined目录用于存放管理应用的各种脚本,其下细分有多个子目录以组织不同的资源.
.
├─user_defined # 使用者自定义目录名
│ ├─bin # 脚本存放目录
│ ├─conf # 配置文件目录
│ ├─lib # 应用依赖的jar包存放目录
│ ├─log # 应用日志输出目录
│ ├─pid # 存放进程ID文件的目录
│ └─sql # SQL脚本或数据相关文件
#!/bin/bash
# 检查脚本是否被传递了有效的命令
if [ -z "$1" ]; then
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
# jar包名称,不带.jar后缀
JAR_NAME='example'
# 获取当前脚本所在的目录
SCRIPT_BIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# jar包主目录
JARPACKAGE_HOME="$SCRIPT_BIN/.."
# 设置jar包的路径
JAR_PATH="$JARPACKAGE_HOME/lib/$JAR_NAME.jar"
# 检查当前目录下是否存此jar文件
if [ ! -f "$JAR_PATH" ]; then
echo "Error: $JAR_NAME.jar not found."
exit 1
fi
# 定义运行的Java命令
JAVA_CMD="java -jar $JAR_PATH"
# 创建pid目录,如果不存在
PID_DIR="$JARPACKAGE_HOME/pid"
mkdir -p "$PID_DIR"
# 启动jar包
start() {
echo "Starting jar package..."
# nohup $JAVA_CMD > /dev/null 2>&1 &
# 使用nohup在后台运行jar包,并将日志输出到文件
nohup $JAVA_CMD > $JARPACKAGE_HOME/log/${JAR_NAME}.log 2>&1 &
echo $! > "$PID_DIR/$JAR_NAME.pid"
echo "Jar package is started. pid is saved in $PID_DIR/$JAR_NAME.pid"
}
# 停止jar包
stop() {
echo "Stopping jar package..."
PID=$(cat "$PID_DIR/$JAR_NAME.pid")
if [ -n "$PID" ]; then
kill $PID
echo "Jar package has been stopped"
yes | rm "$PID_DIR/$JAR_NAME.pid"
else
echo "Error: Jar package is not running."
fi
}
# 重启jar package
restart() {
echo "Restarting jar package..."
stop
sleep 3
start
}
# 根据传入的参数调用相应的方法
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Error: Invalid command. Use {start|stop|restart}."
exit 1
;;
esac
exit 0
JAR_NAME
变量,将其值更改为你的Java应用程序jar包名称(不包含.jar
后缀)。如果Java应用运行时需要额外参数,可以在JAVA_CMD
变量中追加这些参数。保存脚本:将修改后的脚本保存为.sh文件,推荐命名为与你的应用相关的易于识别的名字,如myapp-manager.sh.
构建目录结构:依据之前提到的目录结构图,在你的工作目录下创建相应的目录。确保bin目录下存放着你的Shell脚本,而lib目录内则需放入对应的jar包.
启动应用:通过终端切换到脚本所在的bin目录,然后运行以下命令启动应用:
./myapp-manager.sh start
这将会后台启动你的Java应用,并将输出信息保存到log目录下.log结尾的日志文件中,同时在pid目录下生成一个包含应用进程ID的文件.
停止应用:当需要关闭应用时,执行:
./myapp-manager.sh stop
此命令会读取PID文件,发送终止信号给应用进程,并清理PID文件.
重启应用:如果需要重启应用以应用最新更改,仅需输入:
./myapp-manager.sh restart
这个操作会自动完成停止和再次启动的全过程,中间包含短暂的等待时间以确保平稳过渡.
通过上述Shell脚本,我们不仅实现了Java应用的便捷管理,还保证了操作的自动化与标准化,大大减轻了运维负担。无论是日常开发调试还是生产环境的部署维护,这样的脚本都是提升效率的利器.
希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读! 。
最后此篇关于使用shell脚本在Linux中管理Java应用程序的文章就讲到这里了,如果你想了解更多关于使用shell脚本在Linux中管理Java应用程序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!