固定linux sh启动程序工作目录

2019-12-13  本文已影响0人  裸奔的刺猬

PS:禁止拷贝形式转载,转载请以URL形式

1.简介

解决通过sh脚本控制启停Java jar程序,导致java程序工作目录不固定。
执行sh脚本时,理想它的工作空间是在当前程序/脚本(默认它们同级)所放置的目录,
实际上它是当前执行sh脚本所处的目录(root目录下执行home目录下的脚本,则当前工作空间为root)。

2.解决问题

  1. 通过sh脚本启停jar包,传递参数等。
  2. sh脚本执行jar时,工作空间不在当前脚本文件目录。(导致jar程序的当前运行空间不是sh脚本文件目录,如log4日志保存的日志路径使用./logs保存。本意应该保存在sh文件同级目录,但是实际会跟随sh脚本工作空间路径进行保存)

3.解决思路(对应问题)

  1. 编写脚本,控制参数。
  2. 在sh脚本中获取脚本文件目录,并进入该目录(修改工作空间)。

4.demo

  1. 目录环境
    /root/demo/
    --------------/logs
    --------------/jre1.8/
    ----------------------/bin/java
    --------------/demo.jar
    --------------/start.sh

  2. 执行

root@dyf:~# /root/demo/start.sh xxxx
Usage: {start|stop|status}
root@dyf:~# /root/demo/start.sh status
[demo.jar] not running!
root@dyf:~# /root/demo/start.sh start
/root/demo/jre1.8/bin/java -server -Xms512m -Xmx512m -jar /root/demo/demo.jar  >>/dev/null &
[demo.jar-27330]. start!
root@dyf:~# /root/demo/start.sh start
[demo.jar-27330]. already start.
root@dyf:~# /root/demo/start.sh status
[demo.jar-27330]. is running!
root@dyf:~# /root/demo/start.sh stop
[demo.jar-27330]. stop!
root@dyf:~# /root/demo/start.sh status
[demo.jar] not running!
root@dyf:~# /root/demo/start.sh stop
[demo.jar] not running!

  1. 脚本
#!/bin/sh

# 解决问题2。获取脚本文件目录,并进入该目录。
cd "$(dirname "$0")"

APP="demo.jar"
APP_PATH=$(pwd)/${APP}
APP_PID=$(pgrep -f ${APP})

JVM_PARM="-server -Xms512m -Xmx512m"
JRE_PATH="/root/demo/jre1.8/bin/java"

#程序启动方法
start() {
  if [ -n "${APP_PID}" ]; then
    echo "[${APP}-${APP_PID}]. already start."
  else
    nohup ${JRE_PATH} ${JVM_PARM} -jar ${APP_PATH} "$*" >>/dev/null &
    echo "${JRE_PATH} ${JVM_PARM} -jar ${APP_PATH}" "$*" '>>/dev/null &'

    APP_PID="$!"
    echo "[${APP}-${APP_PID}]. start!"
  fi

}

#停止程序
stop() {
  if [ -z "${APP_PID}" ]; then
    echo "[${APP}] not running!"
  else
    kill -9 ${APP_PID}
    echo "[${APP}-${APP_PID}]. stop!"
  fi
}

#程序运行状态
status() {
  if [ -z "${APP_PID}" ]; then
    echo "[${APP}] not running!"
  else
    echo "[${APP}-${APP_PID}]. is running!"
  fi
}

case $1 in
start)
  start
  ;;
stop)
  stop
  ;;
status)
  status
  ;;
*)
  echo "Usage: {start|stop|status}"
  ;;
esac

exit 0

上一篇 下一篇

猜你喜欢

热点阅读