美文网首页我用 Linux
shell脚本将python脚本加入Linux系统服务

shell脚本将python脚本加入Linux系统服务

作者: 玖月初识 | 来源:发表于2018-05-29 14:31 被阅读11次

    用shell脚本将Python脚本做成系统服务随着系统的启动而启动,同时又可以通过“service”命令进行管理(start|stop|restart)

    新建 FuzzyMatching.sh 脚本文件,写入以下代码:

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          PythonFuzzyMatching
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: PythonFuzzyMatching service
    # Description:       PythonFuzzyMatching service
    ### END INIT INFO
    
    filepath="/home/ldh/work_space/PythonFuzzyMatching/PythonFuzzyMatching.py"
    
    start(){
        nohup python3 $filepath>/dev/null 2>&1 &
        echo 'FuzzyMatching service OK'
    }
    
    
    stop(){
        serverpid=`ps -aux|grep "$filepath"|grep -v grep|awk '{print $2}'`
        kill -9 $serverpid
        echo 'FuzzyMatching stop OK'
    }
    
    
    restart(){
        stop
        echo 'FuzzyMatching stop OK'
        start
        echo 'FuzzyMatching service OK'
    }
    
    
    case $1 in
        start)
        start
        ;;
        stop)
        stop
        ;;
        restart)
        restart
        ;;
        *)
        start
    esac
    

    :& 的意思是在后台运行,什么意思呢?意思是说,当你在执行 ./xxx.sh & 的时候,即使你用ctrl C,那么xxx.sh照样运行(因为对SIGINT信号免疫)。但是要注意,如果你直接关掉shell后,那么,xxx.sh进程同样消失。可见,&的后台并不硬(因为对SIGHUP信号不免疫)。
    nohup的意思是忽略SIGHUP信号,所以当运行nohup ./xxx.sh的时候,关闭shell,那么xxx.sh进程还是存在的(对SIGHUP信号免疫)。但是,要注意,如果你直接在shell中用Ctrl C,那么,xxx.sh进程也是会消失的(因为对SIGINT信号不免疫)。
    所以,&和nohup没有半毛钱的关系,要让进程真正不受shell中Ctrl C和shell关闭的影响,那该怎么办呢?那就用nohua ./xxx.sh &吧,两全其美。
    (1)舍弃标准输出,将错误输出到log文件中
    nohup ./xxx.sh >/dev/null 2>log &
    (2)如果错误信息也不想要的话:
    nohup ./xxx.sh >/dev/null 2>&1 &

    1. 以上代码文件建立之后,运行以下命令给脚本添加可执行权限:
    sudo chmod +x FuzzyMatching.sh
    

    脚本启动命令:

    ./FuzzyMatching.sh start  # 启动脚本
    ./FuzzyMatching.sh stop  # 停止脚本
    ./FuzzyMatching.sh restart  # 重启脚本
    
    1. 将脚本复制到init.d文件夹下,这个目录里放系统服务脚本文件:
    cp FuzzyMatching.sh /etc/init.d
    
    1. 将FuzzyMatching.sh添加到系统服务清单内:
    cd /etc/init.d/
    sudo update-rc.d FuzzyMatching.sh defaults 90  # 这里90表明一个优先级,越高表示执行的越晚
    

    验证是否添加成功:

    sudo service --status-all
    

    输入以上命令查看FuzzyMatching.sh是否在系统服务清单内。
    最后重启验证Python脚本是否随系统启动而启动!
    若是想删除该服务,命令如下:

    sudo update-rc.d FuzzyMatching.sh remove
    

    相关文章

      网友评论

        本文标题:shell脚本将python脚本加入Linux系统服务

        本文链接:https://www.haomeiwen.com/subject/czggjftx.html