虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。
在网上找到一个挺好的通用shell脚本。
只需要修改一些配置变量,就可以用来做起动脚本了。
并且除了能起动、还支持关闭、重启、查看是否正在运行的功能。
原文地址:http://www.tudaxia.com/archives/10
start函数中,nohup部分其实也可以提出来放入一个配置变量中。这里没有修改直接贴上作者的原文
#!/bin/sh
#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,
#也可以作为启动java程序的独立脚本来使用。
#
#Author: tudaxia.com, Date: 2011/6/7
#
#警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。
#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,
#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,
#增加在执行kill命令前的一系列检查。
#
#
###################################
#环境变量及程序执行参数
#需要根据实际环境以及Java程序名称来修改这些参数
###################################
#JDK所在路径
JAVA_HOME="/usr/java/jdk"
#执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号
RUNNING_USER=root
#Java程序所在的目录(classes的上一级目录)
APP_HOME=/opt/tudaxia/test/WEB-INF
#需要启动的Java主程序(main方法类)
APP_MAINCLASS=com.tudaxia.test.TestMain
#拼凑完整的classpath参数,包括指定lib目录下所有的jar
CLASSPATH=$APP_HOME/classes
for i in "$APP_HOME"/lib/*.jar; do
CLASSPATH="$CLASSPATH":"$i"
done
#java虚拟机启动参数
JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"
###################################
#(函数)判断程序是否已启动
#
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid ($1部分),及Java程序名称($2部分)
###################################
#初始化psid变量(全局)
psid=0
checkpid() {
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
if [ -n "$javaps" ]; then
psid=`echo $javaps | awk '{print $1}'`
else
psid=0
fi
}
###################################
#(函数)启动程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示程序已启动
#3. 如果程序没有被启动,则执行启动命令行
#4. 启动命令执行后,再次调用checkpid函数
#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]
#注意:echo -n 表示打印字符后,不换行
#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
###################################
start() {
checkpid
if [ $psid -ne 0 ]; then
echo "================================"
echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
echo "================================"
else
echo -n "Starting $APP_MAINCLASS ..."
JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"
su - $RUNNING_USER -c "$JAVA_CMD"
checkpid
if [ $psid -ne 0 ]; then
echo "(pid=$psid) [OK]"
else
echo "[Failed]"
fi
fi
}
###################################
#(函数)停止程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行
#3. 使用kill -9 pid命令进行强制杀死进程
#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?
#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]
#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。
#注意:echo -n 表示打印字符后,不换行
#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值
###################################
stop() {
checkpid
if [ $psid -ne 0 ]; then
echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
su - $RUNNING_USER -c "kill -9 $psid"
if [ $? -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi
checkpid
if [ $psid -ne 0 ]; then
stop
fi
else
echo "================================"
echo "warn: $APP_MAINCLASS is not running"
echo "================================"
fi
}
###################################
#(函数)检查程序运行状态
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid
#3. 否则,提示程序未运行
###################################
status() {
checkpid
if [ $psid -ne 0 ]; then
echo "$APP_MAINCLASS is running! (pid=$psid)"
else
echo "$APP_MAINCLASS is not running"
fi
}
###################################
#(函数)打印系统环境参数
###################################
info() {
echo "System Information:"
echo "****************************"
echo `head -n 1 /etc/issue`
echo `uname -a`
echo
echo "JAVA_HOME=$JAVA_HOME"
echo `$JAVA_HOME/bin/java -version`
echo
echo "APP_HOME=$APP_HOME"
echo "APP_MAINCLASS=$APP_MAINCLASS"
echo "****************************"
}
###################################
#读取脚本的第一个参数($1),进行判断
#参数取值范围:{start|stop|restart|status|info}
#如参数不在指定范围之内,则打印帮助信息
###################################
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop
start
;;
'status')
status
;;
'info')
info
;;
*)
echo "Usage: $0 {start|stop|restart|status|info}"
exit 1
esac
exit 0
分享到:
相关推荐
- 在Linux环境下,可以创建System V init脚本或者使用Upstart配置来启动Java程序。这些脚本会在系统启动时执行,启动Java应用。 - 需要编写一个`.conf`文件,配置启动命令、环境变量等,并将其添加到相应的启动...
适用人群:生产环境运维人员,需要大量启动jar包的人员、需要设置开机自启动jar包的人员。 使用方法:(1)通过sh autoStart.sh可以启动目录下的所有jar包。(2)通过sh autoStart.sh /home/issue/svr-test 可以启动...
下面将详细介绍如何实现Java应用程序的开机自启动,并探讨相关的技术细节。 1. **Windows系统下的开机启动** 在Windows系统中,可以利用`注册表`来实现Java应用程序的开机启动。打开`regedit`命令行工具,导航到`...
4. **批处理脚本或Shell脚本**:在Windows和Unix系统中,可以创建批处理文件(`.bat`)或Shell脚本(`.sh`),在其中调用Java命令启动程序,并将其添加到系统的启动目录,以实现开机自启动。 5. **注册表编辑**:在...
在计算机系统中,"开机自启动"(开机启动程序)是指在操作系统启动后,某些应用程序或服务会自动运行的功能。这种特性通常被用于确保必要的系统工具、安全软件或用户需要的日常应用能在用户登录时立即可用。下面我们...
- 对于Java应用程序,同样可以创建一个类似的服务单元文件,将`ExecStart`和`ExecStop`指向你的Java程序启动和关闭脚本。 8. **安全考虑**: - 为避免安全风险,确保Tomcat和Java程序运行在非root用户下,且对...
* 可以作为开机自启动service脚本被调用 * 也可以作为启动java程序的独立脚本来使用 * 支持启动、停止、重启和查看是否正在运行的功能 * 可以根据实际环境和Java程序名称修改变量 六、使用建议 在使用该脚本时,...
"Tomcat开机自启动" ...Tomcat 开机自启动可以通过创建自启动脚本、赋予权限、启动服务和设置开机自启动来实现。在本文中,我们介绍了 Tomcat 开机自启动的步骤和相关知识点,为读者提供了一个详细的指南。
保存这个文件到`/etc/systemd/system/`目录下,然后运行以下命令来加载、启动服务并使其开机自启: ```bash sudo systemctl daemon-reload sudo systemctl start application sudo systemctl enable application ``...
这里我们关注的是三个关键组件:Redis、Docker和Java的应用程序开机自启脚本。这三个文件分别提供了关于如何配置这些服务在操作系统启动时自动启动的指导。 1. Redis开机自启设置: Redis是一个开源的、基于内存的...
在Linux环境下配置Tomcat自启动是一项常见的系统管理任务,这对于保持服务器服务的连续性和稳定性至关重要。下面我们将详细探讨如何在Linux系统中设置Apache Tomcat自动启动,并了解与这个过程相关的概念和技术。 ...
在Linux系统中,开机自启动的方法有: 1. `rc.local`脚本:在 `/etc/rc.local` 中添加命令行启动程序。 2. System V init:使用 `/etc/init.d/` 下的服务脚本,通过 `chkconfig` 或 `update-rc.d` 配置启动级别。 3....
本文将深入探讨如何在CentOS 7中创建并执行Java的JAR启动脚本,以及如何配置该脚本使其能在系统开机时自动运行。 首先,我们需要确保系统已经安装了Java开发工具包(JDK),因为这是运行Java应用的基础。可以使用...
在Linux系统中,Tomcat作为一个常用的Java应用服务器,它的开机自启功能对于系统维护和持续服务至关重要。本教程将详细讲解如何在Linux环境下将Tomcat配置为系统服务,实现开机自动启动。 首先,我们需要理解Linux...
【标题】:“Tomcat Linux服务和自启动” 在Linux系统中,Apache Tomcat是一个广泛使用的开源Java Servlet容器,用于部署和运行Java web应用程序。Tomcat是基于Java的轻量级应用服务器,它遵循Java EE规范中的...
本主题主要关注在Linux环境下使用Shell脚本来实现Java Development Kit (JDK) 和 PostgreSQL 数据库的自动化安装。 首先,让我们深入了解一下什么是Shell脚本。Shell脚本是Linux或类Unix操作系统中的一种命令解释器...
在Linux系统中,管理和自动化应用程序启动是运维工作中常见的任务,特别是对于Java开发的应用程序,通常以jar包的形式部署。本文将详细介绍如何利用Service在Linux中启动、停止jar包,并配置其开机自启。 首先,...
### Liunx可执行程序做成服务 #### 概述 在Linux系统中,将一个可执行的Shell脚本程序转化为系统服务,可以极大地方便我们对这个程序进行管理和监控。通常,这种转换需要通过一系列步骤来完成,包括但不限于编写一...
对于`systemd`,我们需要创建一个`.service`文件,定义服务的启动脚本和属性,然后使用`systemctl enable service_name`命令使其开机启动。 4. **远程执行脚本**:如果`AutoStart`是一个脚本,那么可以通过JSch的`...
在Linux环境中,设置Apache Tomcat自启动是一项基本的系统管理任务,这确保了即使在服务器重启后,Tomcat服务也能自动启动,为Java应用程序提供持续的运行环境。以下是详细步骤和相关知识点: 1. **以root用户登录*...