当前位置 : 主页 > 操作系统 > centos >

Linux 添加服务详解

来源:互联网 收集:自由互联 发布时间:2022-06-21
软件安装成服务过程详解: service httpd restart由三部分组成service(服务)、httpd(程序名)、restart(相关命令)少一不可service: 是系统已经定义可的。无需更改。默认会查找/etc/init.d/*http

软件安装成服务过程详解:

service httpd restart 由三部分组成service(服务)、httpd(程序名)、restart(相关命令)少一不可 service: 是系统已经定义可的。无需更改。默认会查找/etc/init.d/*  httpd: 程序名这个是已经确定的。 restart: 相关命令,如start 这个是控制程序走向。   那么非常明确的一个服务需要的流程: 1、程序是可执行程序 2、位置需放在/etc/init.d/目录下 3、相关命令,这个由程序本身决定(有没有指定)。 3.1 如果是已经有相关命令的,那么文件直接拷贝到/etc/init.d目录下,并给矛可执行权限。 3.2 如果是没有定义,那我们需要写一个脚本。并定义好相关命令。   一、看一个sshd实例,来帮助我们了解整体过程。 # vim /etc/init.d/sshd ----------sshd start------------------ #!/bin/bash # # Init file for OpenSSH server daemon # # chkconfig: 2345 55 25 # description: OpenSSH server daemon # # processname: sshd # config: /etc/ssh/ssh_host_key # config: /etc/ssh/ssh_host_key.pub # config: /etc/ssh/ssh_random_seed # config: /etc/ssh/sshd_config # pidfile: /var/run/sshd.pid   # source function library . /etc/rc.d/init.d/functions   # pull in sysconfig settings [ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd   RETVAL=0 prog="sshd"   # Some functions to make the below more readable KEYGEN=/usr/bin/ssh-keygen SSHD=/usr/sbin/sshd RSA1_KEY=/etc/ssh/ssh_host_key RSA_KEY=/etc/ssh/ssh_host_rsa_key DSA_KEY=/etc/ssh/ssh_host_dsa_key PID_FILE=/var/run/sshd.pid   runlevel=$(set -- $(runlevel); eval "echo \$$#" )   do_rsa1_keygen() { if [ ! -s $RSA1_KEY ]; then echo -n $"Generating SSH1 RSA host key: " if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then chmod 600 $RSA1_KEY chmod 644 $RSA1_KEY.pub if [ -x /sbin/restorecon ]; then    /sbin/restorecon $RSA1_KEY.pub fi success $"RSA1 key generation" echo else failure $"RSA1 key generation" echo exit 1 fi fi }   do_rsa_keygen() { if [ ! -s $RSA_KEY ]; then echo -n $"Generating SSH2 RSA host key: " if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then chmod 600 $RSA_KEY chmod 644 $RSA_KEY.pub if [ -x /sbin/restorecon ]; then    /sbin/restorecon $RSA_KEY.pub fi success $"RSA key generation" echo else failure $"RSA key generation" echo exit 1 fi fi }   do_dsa_keygen() { if [ ! -s $DSA_KEY ]; then echo -n $"Generating SSH2 DSA host key: " if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then chmod 600 $DSA_KEY chmod 644 $DSA_KEY.pub if [ -x /sbin/restorecon ]; then    /sbin/restorecon $DSA_KEY.pub fi success $"DSA key generation" echo else failure $"DSA key generation" echo exit 1 fi fi }   do_restart_sanity_check() { $SSHD -t RETVAL=$? if [ ! "$RETVAL" = 0 ]; then failure $"Configuration file or keys are invalid" echo fi }   start() { # Create keys if necessary do_rsa1_keygen do_rsa_keygen do_dsa_keygen cp -af /etc/localtime /var/empty/sshd/etc   echo -n $"Starting $prog: " $SSHD $OPTIONS && success || failure RETVAL=$? [ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd echo }   stop() { echo -n $"Stopping $prog: " if [ -n "`pidfileofproc $SSHD`" ] ; then    killproc $SSHD else    failure $"Stopping $prog" fi RETVAL=$? # if we are in halt or reboot runlevel kill all running sessions # so the TCP connections are closed cleanly if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then    killall $prog 2>/dev/null fi [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/sshd echo }   reload() { echo -n $"Reloading $prog: " if [ -n "`pidfileofproc $SSHD`" ] ; then    killproc $SSHD -HUP else    failure $"Reloading $prog" fi RETVAL=$? echo }   case "$1" in start) start ;; stop) stop ;; restart) stop start ;; reload) reload ;; condrestart) if [ -f /var/lock/subsys/sshd ] ; then do_restart_sanity_check if [ "$RETVAL" = 0 ] ; then stop # avoid race sleep 3 start fi fi ;; status) status -p $PID_FILE openssh-daemon RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" RETVAL=1 esac exit $RETVAL --------------sshd stop--------------------------- 煮酒品茶:可以看出来,一些判断语句和一些执行路径。以即最下方的获取相关命令并给予相关执行命令。瞧,一个服务的添加就这么简单。测试吧 过程如下:   [root@localhost test]# service test restart test: unrecognized service [root@localhost test]# cp test /etc/init.d/ [root@localhost test]# ll /etc/init.d/ |grep test -rwxr-xr-x 1 root root    19 Apr 23 11:37 test [root@localhost test]# service test restart hello world   #vim /etc/init.d/test -------------------test start---------------   case "$1" in start) echo -n "Starting test: "  ~/test/test echo -n "start is OK"   ;; stop) echo -n "Shutting stop test: " killall test echo -n "stop is OK"   ;; esac exit -------------stop------------------- [root@localhost test]# service test start Starting test: hello world start is OK[root@localhost test]# service test stop Shutting stop test: test: no process killed   煮酒品茶:很简单的的可以理解,先是放到service能找的着的地方,然后再给它判断命令如果是start就写文件正在启动test中,启动完后给一个启动ok的。同理结束直接kill掉他的进程就好了。其它的自由发挥比如:reload、restart等。                                
网友评论