Centos6自定义service:设置开机启动

1, Centos6服务器启动流程

  1. BIOS --> bootloader(MBR)–>加载内核
  2. 设置启动级别(/etc/inittab)
  3. 设置主机名,加载文件系统: /etc/rc.d/rc.sysinit
  4. 启动服务: /etc/rc.d/rc: 启动/etc/rc.d/rcX.d/{K*,S*}脚本
  5. /etc/rc.d/rc.local

2, 前台进程:变成后台服务

2.1 , 简单for循环服务

a, 编写服务脚本: /etc/init.d/for

[root@c6 init.d]# ll /etc/init.d/for 
-rwxr-xr-x 1 root root 339 1月  17 11:45 /etc/init.d/for

[root@c6 init.d]# cat /etc/init.d/for 
#!/bin/bash
#description: test service script
#chkconfig: 235 90 90
#prog: some cmd, but not stdout !
f(){
   while :
   do
     echo `date` &>> /var/log/for.log 
     sleep 1
   done
}

#调用系统脚本方法
. /etc/rc.d/init.d/functions
lock_file=/var/lock/subsys/for
pid_file=/var/run/for.pid

#服务管理:start,stop,status
case $1 in
   stop)
       killproc -p $pid_file
       rm -f $lock_file $pid_file
   ;;
   start)
       f &
       pid=$!
       touch $lock_file 
       echo $pid > $pid_file
   ;;
   status)
       echo -n "service for: "
       [ -f $lock_file -a -f $pid_file ] && success  || failure 
       echo
esac

b, 测试服务脚本,并添加开机启动

[root@c6 init.d]# chkconfig --add for
[root@c6 init.d]# chkconfig --list |grep for
for            	0:off	1:off	2:on	3:on	4:off	5:on	6:off

[root@c6 init.d]# service for start                        [  OK  ]
[root@c6 init.d]# service for status
service for:                                               [  OK  ]
[root@c6 init.d]# tailf /var/log/for.log 
Fri Jan 17 12:11:18 CST 2020
Fri Jan 17 12:11:19 CST 2020
...
[root@c6 init.d]# service for stop  					   [  OK  ]

2.2 , 自定义tomcat服务脚本

a, 编写服务脚本: /etc/init.d/mytomcat.sh

####1,服务脚本存放路径 ###
[root@c7 mysh]# ll /etc/init.d/
total 44
-rw-r--r--. 1 root root 18281 8月  24 2018 functions
lrwxrwxrwx. 1 root root    35 1月  11 00:27 jexec -> /usr/java/latest/.java/init.d/jexec
-rwxr-xr-x. 1 root root  1758 1月  11 06:57 mytomcat.sh
-rwxr-xr-x. 1 root root  4569 8月  24 2018 netconsole
-rwxr-xr-x. 1 root root  7923 8月  24 2018 network
-rw-r--r--. 1 root root  1160 10月 31 2018 README

####2,服务脚本内容 ###
[root@c7 mysh]# cat /etc/init.d/mytomcat.sh 
#!/bin/bash
#description: start ctl script
#author: wang
#chkconfig: 345 90 90

tomcat_dir=/root/apache-tomcat-8.5.50
pidfile=/var/run/tomcat.pid

usage_invoke(){
  cat <<EOF
        error, Usage: $0 start|status|stop 
EOF
  exit 1
}

tomcat_invoke(){
    cmd=$1
    backend=$2

    CATALINA_OUT=${tomcat_dir}/logs/catalina.out
    touch $CATALINA_OUT

    eval java '"-Djava.util.logging.config.file=${tomcat_dir}/conf/logging.properties"' \
       ' -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager' \
       ' -Djdk.tls.ephemeralDHKeySize=2048'\
       ' -Djava.protocol.handler.pkgs=org.apache.catalina.webresources '\
       ' -Dorg.apache.catalina.security.SecurityListener.UMASK=0027' \ 
       -classpath '"${tomcat_dir}/bin/bootstrap.jar:${tomcat_dir}/bin/tomcat-juli.jar"'\
       ' -Dcatalina.base="${tomcat_dir}"'\
       ' -Dcatalina.home="${tomcat_dir}"' \
       ' -Djava.io.tmpdir="${tomcat_dir}/temp"' \
    org.apache.catalina.startup.Bootstrap $cmd >> $CATALINA_OUT 2>&1 "$backend"
}

start_invoke(){
    status_invoke
    if [ $? -eq 1 ] ;then
        tomcat_invoke start  "&"
        pid=$!
        echo $pid  >$pidfile
        echo "server start at pid: $pid "
    fi
}
stop_invoke(){
    status_invoke
    [ $? -eq 0 ] && tomcat_invoke stop && rm -f $pidfile
}
status_invoke(){
    if [ -e $pidfile ] ;then 
       if ps -ef |awk '{print $2}' |grep `cat $pidfile` ; then 
             return 0;
       else
             return 1;
       fi
    else 
             return 1;
    fi
}

#1,require action args
[ $# -eq 0 ] && usage_invoke 

#2,decide how to invoke the method by the action args
args=$1
case $args in 
    start)
      start_invoke
    ;;
   
    stop)
      stop_invoke
    ;;
  
    status)
      status_invoke
      [ $? -eq 0 ] && echo "tomcat already started !" || echo "tomcat not started !"
    ;;
  
    *)
      usage_invoke 
esac

b, 测试服务脚本,并添加开机启动

####1, 服务开机启动 ###
[root@c7 mysh]# chkconfig --add mytomcat.sh
[root@c7 mysh]# chkconfig --list
jexec          	0:off	1:on	2:on	3:on	4:on	5:on	6:off
mytomcat.sh    	0:off	1:off	2:off	3:on	4:on	5:on	6:off
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

####2,测试服务调用 ###
[root@c7 ~]# service mytomcat.sh start
server start at pid: 14722 
[root@c7 ~]# service mytomcat.sh status
14722
tomcat already started !
[root@c7 ~]# ss -nltp |grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=14722,fd=40))
[root@c7 ~]# service mytomcat.sh stop
14722
[root@c7 ~]# ss -nltp |grep 8080
[root@c7 ~]# 

####3,查看日志文件 ###
[root@c7 mysh]# service mytomcat.sh start
server start at pid: 17986 
[root@c7 mysh]# date
2020年 01月 11日 星期六 10:02:44 CST

[root@c7 mysh]# tailf /root/apache-tomcat-8.5.50/logs/catalina.out 
11-Jan-2020 10:02:24.776 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/root/apache-tomcat-8.5.50/webapps/docs] has finished in [59] ms
11-Jan-2020 10:02:24.777 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/root/apache-tomcat-8.5.50/webapps/examples]

3, 后台进程: 变成后台服务

  • 使用解压tar包的方式安装Cloudera Manager, 运行CDH服务,但是没有服务脚本来管控此服务,启动和停止操作不太方便, 每次都要使用绝对路径来运行程序

cdh-server

cat >/etc/init.d/cdh-server <<EOF
#!/bin/bash
# chkconfig: 2345 90 90 
# description: cdh.service ....

agent=/opt/cm-5.*/etc/init.d/cloudera-scm-agent
server=/opt/cm-5.*/etc/init.d/cloudera-scm-server
cmd=\$1

case \$1 in 
  start)  	\$server start;  \$agent start ;;
  stop)   	\$agent stop;    \$server stop ;;
  status) 	\$server status; \$agent status;;
  restart) 	\$server restart; \$agent restart;;
  * )	     echo "Usage :   \$server start|restart|stop|status"
esac
EOF

chmod +x /etc/init.d/cdh-server
chkconfig cdh-server on
发布了276 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/103367632