天天看点

linux自定义服务

模仿/etc/rc.d/init.d下的任意一个文件的内容,写一个新的文件,名字和你的servicename的名字一样,然后执行

chkconfig --add  servicename

执行成功后,编辑servicename文件,

例如:

#!/bin/bash
# whoami
# root
# chkconfig: 345 51 49 

# description: starts the jboss  deamons
#
JBOSS_HOME=/usr/java/jboss
JBOSS_OWNER=root
case "$1" in
'start')  
echo -n "Starting jboss: "
su  - $JBOSS_OWNER -c "$JBOSS_HOME/bin/run.sh" &
touch /var/lock/subsys/jboss
echo
;;

'stop')
echo -n "shutting down jboss! "
su - $JBOSS_OWNER -c "kill -9 $(ps -ef | grep jboss | grep java | awk '{print $2}')"  
rm -f /var/lock/subsys/jboss
echo
;;

'restart')
echo -n "restarting jboss: "
$0 stop  
$0 start
echo
;;
*)
echo "usage: jboss { start | stop | restart }" 
exit 1

esac
exit 0      

错误一:

service myservice does not support chkconfig      

我们一般在脚本开头加入下面两句就好了

添加下面两句到 #!/bin/bash 之后。

# chkconfig: 2345 10 90 # description: myservice ....      

其中2345是默认启动级别,级别有0-6共7个级别。

  等级0表示:表示关机   

  等级1表示:单用户模式   

  等级2表示:无网络连接的多用户命令行模式   

  等级3表示:有网络连接的多用户命令行模式   

  等级4表示:不可用   

  等级5表示:带图形界面的多用户模式   

  等级6表示:重新启动

10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。

错误二:

用root用户直接运行脚本来启动jboss没有报任何的错误,当用普通用户来运行的时候,

出错如下:

WARNING: error instantiating 'org.apache.juli.ClassLoaderLogManager' referenced by java.util.logging.manager, class not found

java.lang.ClassNotFoundException: org.apache.juli.ClassLoaderLogManager not found

   <<No stacktrace available>>

WARNING: error instantiating '1catalina.org.apache.juli.FileHandler,' referenced by handlers, class not found

java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler,

Exception during runtime initialization

java.lang.ExceptionInInitializerError

Caused by: java.lang.NullPointerException

经过分析,原因无法加载到java的环境变量,所以要修改启动脚本,添加上环境变量,修改后如下:

#!/bin/bash

#file_name:go.sh

JAVA_HOME=/usr/local/jdk1.6.0_11

export JAVA_HOME

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export CLASSPATH

PATH=$JAVA_HOME/bin:$PATH

export PATH

nohup ./catalina.sh run> tomcat.log &

继续阅读