zoukankan      html  css  js  c++  java
  • 创建一个最简单的Linux随机启动服务

    创建一个最简单的Linux随机启动服务 « Xiaoxia[PG]

    创建一个最简单的Linux随机启动服务
    网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.d/rc.local或者/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,

    service mysql restart
    service apache2 stop

    或者

    /etc/init.d/mysql restart
    /etc/init.d/apache2 stop

    因为不同的Linux发行版本,对后台服务的处理方式不大一样,所以下面以Ubuntu系统为例,看看如何写一个简单的随机启动服务。

    准备好一个需要随机启动的程序,例如/root/proxy.py,设置可执行属性,确保可以通过输入绝对路径直接执行。

    root@localhost:~# chmod +x proxy.py
    root@localhost:~# /root/proxy.py
    Loaded 0 hosts.
    Proxy over h2.edu.bj.ie.sogou.com.
    Please set your browser's proxy to ('::', 1998).

    编写一个启动控制脚本,以proxy为例,建立/etc/init.d/proxy文本文件,输入下面的内容:

    #!/bin/sh

    case "$1" in
    start)
    start-stop-daemon --start --background --exec /root/proxy.py
    ;;
    stop)
    start-stop-daemon --stop --name proxy.py
    esac
    这是一个简单的shell脚本,case .. in是用来根据调用参数进行不同的操作,start-stop-daemon是一个可以管理daemon进程的程序,要查看它的详细说明,可以运行man start-stop-daemon。start的时候,使用--exec指定要执行的文件,stop的时候,使用--name根据进程名字来使用killall结束匹配的进程。

    接着,设置脚本文件属性,设置可执行标记。

    root@localhost:~# chmod 755 /etc/init.d/proxy

    这样子,就可以使用service命令来启动和关闭进程了,例如启动进程如下:

    root@localhost:~# service proxy start
    root@localhost:~# ps aux|grep proxy
    root 353 1.4 1.9 8644 5212 ? S 09:50 0:00 /usr/bin/python /root/proxy.py
    root 355 0.0 0.2 1900 596 pts/0 S+ 09:50 0:00 grep --color=auto proxy
    关闭进程,

    root@localhost:~# service proxy stop
    root@localhost:~# ps aux |grep proxy
    root 365 0.0 0.2 1900 592 pts/0 S+ 09:51 0:00 grep --color=auto proxy
    到这里,一个Linux服务的进程控制脚本已经写好了,但是要实现随机启动,还需要一个步骤。
    Linux开机的时候,不是直接运行/etc/init.d下的所有脚本的,而是根据不同的runlevel来执行/etc/rc$runlevel.d下的脚本。这里的runlevel是用以区别系统的运行方式(例如单用户的runlevel,多媒体桌面的runlevel,服务器的runlevel都不同)。

    在Ubuntu里,可以使用update-rc.d来把/etc/init.d/proxy安装到各个runlevel中。更多关于update-rc.d的说明,请参见man update-rc.d。

    root@localhost:~# update-rc.d proxy defaults 99
    update-rc.d: warning: /etc/init.d/proxy missing LSB information
    update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
    Adding system startup for /etc/init.d/proxy ...
    /etc/rc0.d/K99proxy -> ../init.d/proxy
    /etc/rc1.d/K99proxy -> ../init.d/proxy
    /etc/rc6.d/K99proxy -> ../init.d/proxy
    /etc/rc2.d/S99proxy -> ../init.d/proxy
    /etc/rc3.d/S99proxy -> ../init.d/proxy
    /etc/rc4.d/S99proxy -> ../init.d/proxy
    /etc/rc5.d/S99proxy -> ../init.d/proxy
    update-rc.d后面有三个参数,分别是/etc/init.d下的脚本名字,默认安装方式,运行的优先级。优先级的数字越大,表示越迟运行,这里我们把自己写的服务放在最后运行。

    如果要卸载随机启动的服务,执行

    update-rc.d -f proxy remove

    在update-rc.d安装的时候提示了警告信息,是因为我们写的/etc/init.d/proxy太简陋了,连LSB的信息也没有提供。

    update-rc.d: warning: /etc/init.d/proxy missing LSB information
    update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

    只需要做一些小改动,就可以避免那个警告了。如下:

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: proxy
    # Required-Start: $remote_fs
    # Required-Stop: $remote_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start or stop the HTTP Proxy.
    ### END INIT INFO

    case "$1" in
    start)
    start-stop-daemon --start --background --exec /root/proxy.py
    ;;
    stop)
    start-stop-daemon --stop --name proxy.py
    esac
    到此,一个最简单的随机启动服务写好了,看起来文章挺长的,但其实也就几个命令而已。
    在下次开机启动的时候,proxy.py就会以root用户身份被自动运行。

    在江浙沪一带找技术工作,能提供工作的麻烦联系我

  • 相关阅读:
    Good Bye 2014 B. New Year Permutation(floyd )
    hdu 5147 Sequence II (树状数组 求逆序数)
    POJ 1696 Space Ant (极角排序)
    POJ 2398 Toy Storage (叉积判断点和线段的关系)
    hdu 2897 邂逅明下 (简单巴什博弈)
    poj 1410 Intersection (判断线段与矩形相交 判线段相交)
    HDU 3400 Line belt (三分嵌套)
    Codeforces Round #279 (Div. 2) C. Hacking Cypher (大数取余)
    Codeforces Round #179 (Div. 2) B. Yaroslav and Two Strings (容斥原理)
    hdu 1576 A/B (求逆元)
  • 原文地址:https://www.cnblogs.com/tonykan/p/3768286.html
Copyright © 2011-2022 走看看