不同路径下shell脚本启动java程序时项目根目录问题
问题描述
将java项目打成tar.gz
格式, 然后再Linux上解压缩, 文件目录:
./
-conf/
-bin/
-startup.sh
-lib/
-logs/
-README.md
我执行./bin/startup.sh
启动java程序.
但是, 烦人的是:
启动脚本时路径不同, 项目的根目录就会不同.
- tar根目录下执行
sh bin/startup.sh
时, java会将tar包根目录作为项目根目录.
代码中new File("logs/xx.log")
, 会生成./logs/xx.log
, 这是想要的预期效果.
- 但是, 挡在
./bin/
下执行sh startup.sh
时,new FIle("logs/xx.log")
就会在./bin/logs/
下产生xx.log
文件. 这显然不是想要的效果, 很恼人.
startup.sh
#!/bin/bash
current_path=`pwd`
case "`uname`" in
Linux)
bin_abs_path=$(readlink -f $(dirname $0))
;;
*)
bin_abs_path=`cd $(dirname $0); pwd`
;;
esac
echo "脚本位置: $bin_abs_path"
#base=${bin_abs_path}/..
base=$(dirname $(cd `dirname $0`;pwd))
echo "base path: $base"
export LANG=en_US.UTF-8
export BASE=$base
#can't run repeatedly
if [ -f $base/bin/addr.pid ] ; then
echo "found bin/addr.pid , Please run stop.sh first ,then startup.sh" 2>&2
exit 1
fi
## set java path
if [ -z "$JAVA" ] ; then
JAVA=$(which java)
fi
str=`file $JAVA_HOME/bin/java | grep 64-bit`
if [ -n "$str" ]; then
JAVA_OPTS="-server -Xms1024m -Xmx1536m -Xmn256m -XX:SurvivorRatio=2 -XX:PermSize=96m -XX:MaxPermSize=256m -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError"
else
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m "
fi
JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
for i in $base/lib/*;
do CLASSPATH=$i:"$CLASSPATH";
done
#$JAVA $JAVA_OPTS -classpath .:$CLASSPATH com.jfai.addr.StartUp 1>>$base/bin/nohup.out 2>&1 &
$JAVA $JAVA_OPTS -classpath .:$CLASSPATH com.jfai.addr.StartUp 1>$base/bin/nohup.out 2>&1 &
echo $! > $base/bin/addr.pid
echo "Process addr is running..., pid=$!"
cd $current_path
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以在startup.sh一开始的地方就cd更改目录到你想去的目录,不要依赖调用者当前目录,就可以了,比如如果你想进入bin目录,最开始的地方加
如果你想在上一级目录,就