shell 脚本启动jar程序

本文介绍如何在Linux环境下启动一个包含依赖的Java jar包程序,包括shell脚本编写及解决因文件格式引起的执行错误。

Linux下启动jar包程序,直接上步骤:

1、首先,maven项目打成一个jar包,同时使用dependency:copy-dependencies命令导出依赖的jar包,把导出的包和项目jar包都放进lib文件夹里

2、编写shell脚本:

#!/bin/bash
export JAVA_HOME=/home/program/java/jdk1.8.0_60              ###jdk安装路径
java=$JAVA_HOME/bin/java

JAVA_OPTS=$JAVA_OPTS:"-Xms1024m -Xmx1024m"
export JAVA_OPTS
SERVER_HOME=/opt/nutch                     ###放置lib文件夹和shell的目录
LIBDIR=$SERVER_HOME/lib

CONFDIR=$SERVER_HOME/conf                  ###可去掉,放置配置文件
export CONFDIR

export LIBDIR
CLASSPATH=${CLASSPATH}:${LIBDIR}
CLASSPATH=${CLASSPATH}:${CONFDIR}:${LIBDIR}


for cdir in ${LIBDIR}/*.jar
do
 CLASSPATH=$CLASSPATH:$cdir
 export CLASSPATH
done
export CLASSPATH
exec $java com.yaochufa.jframework.nutch.AppStarter $* >logs/stdout.log 2>&1 &                   ###指定启动的程序类

#tail -f /home/yang/program/file/stock_task/logs/stdout.log

可在启动的程序类main方法中加入以下代码:

CountDownLatch latch =new CountDownLatch(1);
latch.await();

3、linux进入目录,赋予shell脚本可执行的权限,执行shell

这时会出现一个错误:-bash: ./nutch.sh: /bin/bash^M: bad interpreter: No such file or directory

主要原因是nutch.sh是我在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。

我们可以通过vi编辑器来查看文件的format格式。步骤如下:

1.首先用vi命令打开文件

Shell代码   收藏代码
  1. [root@localhost test]# vi nutch.sh   

2.在vi命令模式中使用 :set ff 命令

可以看到改文件的格式为dos

3.修改文件format为unix

方法一:使用vi修改文件format

命令:set ff=unix

执行完后再通过set ff命令查看文件格式,结果如下:

方法二:直接使用dos2unix命令修改

Shell代码   收藏代码
  1. [root@localhost test]# dos2unix nutch.sh   
  2. dos2unix: converting file test.sh to UNIX format ...  

 修改完后再次执行./test.sh,执行正确:

Shell代码   收藏代码
  1. [root@localhost test]# ./nutch.sh   
  2. test shell   


参考资料:

什么时候使用CountDownLatch  http://www.importnew.com/15731.html

### 编写Shell脚本启动JAR 为了简化Java应用程序特别是基于Spring Boot的应用程序的管理,可以创建一个通用的Shell脚本来处理解压缩ZIP文件、启动、停止和重启JAR的操作。下面是一个详细的指南来构建这样一个实用工具。 #### 创建基础结构 首先定义脚本的基本框架,在这个例子中命名为`app_control.sh`: ```bash #!/bin/bash # 定义变量用于存储应用名称和其他配置参数 APP_NAME="your-app-name" DEPLOY_PATH="/path/to/deploy/directory" LOG_FILE="$DEPLOY_PATH/$APP_NAME.log" case "$1" in start) echo "Starting $APP_NAME..." # 启动逻辑... ;; stop) echo "Stopping $APP_NAME..." # 停止逻辑... ;; restart) echo "Restarting $APP_NAME..." # 重启逻辑... ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac ``` 此段代码提供了基本的选择菜单以便于后续扩展不同操作的功能[^3]。 #### 添加具体实现细节 对于每种情况(即启动、停止或重启),都需要具体的命令去完成相应的任务。这里展示了一个完整的版本,它不仅能够控制服务的状态还能记录日志并检查进程是否存在。 ```bash #!/bin/bash # 设置环境变量 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH # 应用基本信息设置 APP_NAME="example-springboot-app.jar" DEPLOY_PATH="/opt/example-app/" PID_FILE="$DEPLOY_PATH/app.pid" LOG_FILE="$DEPLOY_PATH/application.log" function check_pid { if [ -f $PID_FILE ]; then PID=$(cat $PID_FILE); ps -p $PID > /dev/null 2>&1; return $?; fi return 1; } case "$1" in start) cd $DEPLOY_PATH || exit if check_pid ; then echo "$APP_NAME is already running." exit 1 else nohup java -jar $APP_NAME >>$LOG_FILE 2>&1 & echo $! >$PID_FILE sleep 1s tail -n 100 $LOG_FILE | grep 'Started ExampleApplication' if [ $? -eq 0 ];then echo "$APP_NAME started successfully!" else echo "Failed to start $APP_NAME, please see logs at $LOG_FILE for more information." fi fi ;; stop) if ! check_pid ; then echo "$APP_NAME was not running." exit 1 else kill $(<"$PID_FILE"); rm -rf $PID_FILE while pgrep -u $USER -x java >/dev/null; do :; done echo "$APP_NAME stopped successfully!" fi ;; restart) $0 stop && $0 start ;; status) if check_pid ; then echo "$APP_NAME is running (pid:$(cat $PID_FILE))." else echo "$APP_NAME is NOT running." fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 ``` 上述脚本实现了对指定路径下的`.jar`文件进行管理和监控的能力,并通过简单的命令行接口提供给用户使用[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值