文件名:demo_project.sh
#!/bin/bash
#
# Simple app init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: app_8080
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: app data structure server
# Description: app data structure server.
### END INIT INFO
#没有设置环境变量,可以单独指定
export JAVA_HOME=/usr/local/java/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
APP_NAME=demo_project.jar
APP_PATH=/opt/app/
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh demo_project [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_PATH/$APP_NAME > /dev/null 2>&1 &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
#创建如下目录,把jar和demo_project.sh 都放到如下目录
/data/app/
#授权
chmod +x /data/app/demo.jar
chmod +x /data/app/demo_project.sh
#创建软连接
ln -s /data/app/demo_project.sh /etc/init.d/demo_project
#创建开机启动
chmod +x /etc/init.d/demo_project
cd /etc/init.d/
sudo update-rc.d demo_project defaults 90
#sudo update-rc.d -f demo_project remove
#启动方式1
service demo_project start
service demo_project stop
service demo_project restart
#启动方式2
cd /data/app
sudo ./demo_project.sh start
sudo ./demo_project.sh stop
设置虚拟机内存
nohup java -jar -Xms1024M -Xmx10240M project.jar
说明:
Xms:堆内存初始大小
Xmx:堆内存最大值
PermSize:永久内存初始大小
MaxPermSize:永久内存最大值
堆内存和永久内存区别以及其他参数设置,参考jvm运行机制
启动中遇到的问题总结
1.linux /bin/bash^M: bad interpreter的解决办法
原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。
查看文件格式有三种方法:
1.cat -A <filename>,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式。
2.vim <filename>,编辑文件,执行“:set ff”,若执行结果为fileformat=dos则为dos格式,若执行结果为fileformat=unix则为unix格式。
3.od -t x1 <filename>,以16进制查看文件,若输出结果中存在“0d 0a”则为dos格式,如果只有“0a”则为unix格式。其中“0d”即为回车符“\r”,“0a”即为换行符“\n”。
修改文件格式有三种方式:
1.sed -i "s/\r//" <filename>或sed -i "s/^M//" <filename>,直接将回车符替换为空字符串。
2.vim <filename>,编辑文件,执行“: set ff=unix”,将文件设置为unix格式,然后执行“:wq”,保存退出。
3.dos2unix <filename>或busybox dos2unix <filename>,如果提示command not found,可以使用前两种方法。