Linux启动脚本
### Linux启动脚本详解 #### 一、概述 在Linux环境下,经常需要通过脚本来启动或停止Java应用程序。本文档将详细介绍一个通用的Linux启动脚本,它不仅可以启动Java程序,还能有效地管理进程的生命周期。该脚本由tudaxia.com编写于2011年6月7日,主要功能包括:启动Java程序、检查进程是否正在运行以及停止已运行的Java程序等。 #### 二、脚本结构与关键配置 ##### 1. JDK路径配置 脚本首先定义了JDK的安装路径,以便后续能够正确调用Java命令。示例中配置为: ``` JAVA_HOME="/usr/java/jdk" ``` 这里的路径需要根据实际情况进行调整。如果JDK安装在不同的位置,则需要修改此行代码,确保指向正确的JDK目录。 ##### 2. 运行用户 脚本还指定了启动Java程序的用户: ``` RUNNING_USER=root ``` 这里设置为root用户,意味着Java程序将以root权限运行。如果需要使用其他用户身份运行,可以更改此处设置。 ##### 3. 应用程序主类及目录配置 接下来是关于应用程序的配置信息,包括应用程序的主类名称及其所在的目录: ``` APP_HOME=/opt/tudaxia/test/WEB-INF APP_MAINCLASS=com.tudaxia.test.TestMain ``` 其中`APP_HOME`指定了应用程序的主要目录,而`APP_MAINCLASS`则指定了应用程序的入口类名。这些配置项需要根据实际的应用程序进行设置。 ##### 4. 类路径配置 为了确保Java程序能够找到所有必要的类库,脚本还会构建classpath: ``` CLASSPATH=$APP_HOME/classes for i in "$APP_HOME"/lib/*.jar; do CLASSPATH="$CLASSPATH":"$i" done ``` 这里先将应用程序的class文件所在的目录添加到classpath中,然后遍历lib目录下的所有.jar文件,并将其加入到classpath中。这一步非常重要,因为正确的classpath是Java程序能够正常运行的前提之一。 ##### 5. Java虚拟机参数配置 脚本还允许指定Java虚拟机的启动参数: ``` JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m" ``` 这些参数包括最小和最大堆内存大小、永久代的最大大小等,可以根据实际应用的需求进行调整。 #### 三、脚本功能实现 ##### 1. 检查Java程序是否正在运行 脚本提供了检查Java程序是否正在运行的功能: ``` checkpid() { javaps="$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS" if [ -n "$javaps" ]; then psid=$(echo $javaps | awk '{print $1}') else psid=0 fi } ``` 这段代码通过`jps`命令获取当前运行的所有Java进程,并通过`grep`过滤出包含`APP_MAINCLASS`的进程ID。如果找到了匹配的进程,则记录其PID,否则PID设置为0。 ##### 2. 启动Java程序 脚本支持启动Java程序: ``` start() { checkpid if [ "$psid" -ne 0 ]; then echo "warn: $APP_MAINCLASS already started (pid=$psid)" 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 } ``` 首先调用`checkpid`函数检查Java程序是否已经在运行。如果未运行,则使用`nohup`命令后台启动Java程序,并重定向标准输出和错误输出至`/dev/null`,防止输出干扰。 ##### 3. 停止Java程序 脚本同样支持停止Java程序: ``` 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 else echo "warn: $APP_MAINCLASS is not running" fi } ``` 同样是先通过`checkpid`函数获取进程ID,如果存在,则使用`kill -9`强行终止进程,并通过`$?`判断是否成功执行。 #### 四、小结 这个脚本不仅能够帮助用户在Linux系统下启动和停止Java应用程序,还能确保程序的稳定运行。通过合理的配置,用户可以根据自己的需求定制启动参数、指定运行用户以及其他重要的环境变量,从而更好地管理Java应用程序。