1, Centos6服务器启动流程
- BIOS --> bootloader(MBR)–>加载内核
- 设置启动级别(/etc/inittab)
- 设置主机名,加载文件系统: /etc/rc.d/rc.sysinit
- 启动服务: /etc/rc.d/rc: 启动/etc/rc.d/rcX.d/{K*,S*}脚本
- /etc/rc.d/rc.local
2, 前台进程:变成后台服务
2.1 , 简单for循环服务
a, 编写服务脚本: /etc/init.d/for
[root@c6 init.d]
-rwxr-xr-x 1 root root 339 1月 17 11:45 /etc/init.d/for
[root@c6 init.d]
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
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]
[root@c6 init.d]
for 0:off 1:off 2:on 3:on 4:off 5:on 6:off
[root@c6 init.d]
[root@c6 init.d]
service for: [ OK ]
[root@c6 init.d]
Fri Jan 17 12:11:18 CST 2020
Fri Jan 17 12:11:19 CST 2020
...
[root@c6 init.d]
2.2 , 自定义tomcat服务脚本
a, 编写服务脚本: /etc/init.d/mytomcat.sh
[root@c7 mysh]
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
[root@c7 mysh]
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
}
[ $
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