Python3将web服务和脚本做成开机自启

1.将bwService文件放到 /etc/init.d/下

bwService文件(类型是文件)

#!/bin/bash
#
# This shell script takes care of starting and stopping
#  the Bw system.
#
# chkconfig: - 99 01
# description: Bw Service.
# processname: BwService
# pidfile: /var/run/BwService.pid
# version: V3.0.0.0

myname=`whoami`
pid_file=bwService.pid
#. /lib/lsb/init-functions
python_prog=python3
svc_arg=/home/bw/repo/switch_ssh.py
web_arg="/opt/zabbix3d/manage.py runserver 0.0.0.0:8000"
makeAbsolute() {
    case $1 in
        /*)
            # already absolute, return it
            echo "$1"
            ;;
        *)
            # relative, prepend $2 made absolute
            echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/.$,,'
            ;;
    esac
}

getlibdir(){
    for element in `ls $1`
    do  
        dir_or_file=$1"/"$element
        if [ -d $dir_or_file ]
        then 
            libdir="$libdir:$dir_or_file"
            getlibdir $dir_or_file
        fi  
    done
}


BOOTUP=color
RES_COL=60
MOVE_TO_COL="echo -en \033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \033[1;32m"
SETCOLOR_FAILURE="echo -en \033[1;31m"
SETCOLOR_NORMAL="echo -en \033[0;39m"

# define some functions to be used by most or all shell scripts
# -------------------------------functions start------------------------------

echo_success() {
  txt="OK"
  if [ ! "$1" = "" ]; then
    txt="$1"
  fi
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "[  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"$txt"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  echo -e "
"
  return 0
}


echo_failure() {
  txt="FAILED"
  if [ ! "$1" = "" ]; then
    txt="$1"
  fi
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo -n $"$txt"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -e "
"
  return 1
}

#test -x $PROGRAM || exit 0

# Check if $pid (could be plural) are running
checkpid() {
 local i

 for i in $* ; do
  [ -d "/proc/$i" ] && return 0
 done
 return 1
}


#get the pid
getpid() {
ps -ef|grep -v grep| grep -v '/usr/bin' |grep "$python_prog $1" | awk '{print $2}'
#cmd="ps -ef|grep -v grep |grep ""
#for arg in $*; do
#cmd=${cmd}" "${arg} 
#done
#cmd="${cmd}" | awk '{print $2}'"
#echo $cmd
#pid=`$cmd`
#echo $$
#pid=$(ps -ef|grep $1|grep "$2"|awk '{printf $2}')
#echo $pid
   #if [ -n $2 ]; then

       #ps -ef|grep "$1" |grep "$2"| awk '{print $2}'
   #else
    #ps -ef|grep "$1" | awk '{print $2}'
   #fi

}

#get the port
getport()
{
  grep "sPORT_NUM" "$path"  | grep -Eo "[0-9]+"
}
#get root user
get_root_user()
{
    if [ "x" = "x$ners_user" ] || [ "$ners_user" = "root" ]; then
        ners_user=`ls -ld "$ners_home/." 2>/dev/null | awk 'NR==1{print $3}'`
        export ners_user
    fi
}

#get the pid username
getpiduser()
{
    ps -eo user,pid,args | grep -F "$path" | grep "$prog_path/$1" | awk '$3 !~/^[su|-]/{print $1}'
}


# A function to stop a program.
killproc() {
 RC=0
 # Test syntax.
 if [ "$#" -eq 0 ]; then
   echo $"Usage: killproc {program} [signal]"
   return 1
 fi

 notset=0
 # check for second arg to be kill level
 if [ -n "$2" ]; then
   killlevel=$2
 else
   notset=1
   killlevel=""
 fi

 pid=`getpid $1`
 echo $pid
 # Kill it.
 if [ -n "${pid:-}" ] ; then
   [ "$BOOTUP" = "verbose" -a -z "$LSB" ] && echo -n "$2 "
   if [ "$notset" -eq "1" ] ; then
       # TERM first, then KILL if not dead
       kill -TERM $pid
       while checkpid $pid; do
         sleep 1
     done
     checkpid $pid
     RC=$?
     [ "$RC" -eq 0 ]
     RC=`expr 1 - $RC `
   # use specified level only
   else
     if checkpid $pid; then
       kill -9 $pid
    while checkpid $pid; do
         sleep 1
     done
       RC=$?
       [ "$RC" -eq 0 ]
     fi
   fi
 else
   echo $"$1 shutdown"
   RC=1
 fi

 # Remove pid file if any.
 if [ "$notset" = "1" ]; then
   rm -f /var/run/$pid_file
 fi
 
 return $RC
}

start(){
  pid=`getpid $2`
  if [ -n "$pid" ]
  then
    echo "$1 服务已经在运行."
    return 1
  fi
  echo -n $"启动$1服务: "
  dirPath=`dirname $2`
  nohup $python_prog $2 $3 $4 >> "$dirPath/output.log" 2>&1 &

  ret=$?  
  if [ $ret -eq 0 ]; then
    sleep 5
    pid=`getpid $2`
    if [ -n "$pid" ]; then
      echo_success
    else
      echo_failure
      cat "$dirPath/output.log"
      return 1
    fi
  else
    echo_failure
    cat "$dirPath/output.log"
    return 1
  fi

 if [ $ret -eq 0 ] && [ -w "/var/run/" ]
  then
    touch /var/run/$pid_file
    pid=`getpid $2`
    echo $pid > /var/run/$pid_file
  fi
 return $ret
}


stop(){

 pid=`getpid $2`

 dirPath=`dirname $2`
 if [ -n "$pid" ]; then
   echo -n $"停止$1服务: "
   killproc $2 > "$dirPath/output.log" 2>&1
   ret=$?
   if [ $ret -eq 0 ]; then      
     echo_success
   else
     echo_failure
     cat "$dirPath/output.log"
   fi

if [ $ret -eq 0 ] && [ -w "/var/run/$pid_file" ]
   then
     rm -f /var/run/$pid_file
   fi
 else
   echo -n "停止$1服务"
    echo_success
   return 0
 fi
 return $ret
}
startSvc(){
    start "交换机" $svc_arg 
    start "网站" $web_arg 
}

stopSvc(){
    stop "交换机" $svc_arg 
    stop "网站" $web_arg 
}

restart(){
   stopSvc
   startSvc
}
restartWeb(){
   stopSvc
   startSvc
}
list(){
  pid=`getpid $2`
  if [ -n "$pid" ]
    then
        echo -n "$1服务"
        echo_success "正在运行"
    else
        echo -n "$1服务"
        echo_failure "停止运行"
  fi
 return $ret
}

case "$1" in
  start)
    start "交换机" $svc_arg 
    start "网站" $web_arg 
     ;;
  stop)
    stop "交换机" $svc_arg 
    stop "网站" $web_arg 
     ;;
  startswitch)
    start "交换机" $svc_arg 
     ;;
  stopswitch)
    stop "交换机" $svc_arg 
     ;;
  startweb)
    start "网站" $web_arg 
     ;;
  stopweb)
    stop "网站" $web_arg 
     ;;
  restart)
     restart
     ;;
  status)
     list "交换机" $svc_arg 
     list "网站" $web_arg
     ;;
  *)
     exit 1
esac
exit 0

相关命令

[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# rz
[root@localhost init.d]# ls
bwService functions netconsole network README

2.bwService赋予执行权限

[root@localhost init.d]# chmod +x bwService 

3.添加bwService到centos服务里

[root@localhost init.d]# chkconfig --add bwService


4.创建相关软连接

[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc0.d/K03bwService
[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc1.d/K03bwService
[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc2.d/S98bwService
[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc3.d/S98bwService
[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc4.d/S98bwService
[root@localhost init.d]# ln -s /etc/init.d/bwService /etc/rc5.d/S98bwService

5.查看服务状态,开启服务

[root@localhost init.d]# service bwService status
交换机服务 [停止运行]
网站服务 [停止运行]
[root@localhost init.d]# service bwService start
启动交换机服务: [ OK ]
启动网站服务: [ OK ]
[root@localhost init.d]#
原文地址:https://www.cnblogs.com/daofaziran/p/14119342.html