校园网&openwrt记(十四) init服务方法

来源:互联网 发布:淘宝没有解除手机绑定 编辑:程序博客网 时间:2024/06/05 05:59

  为了使应用有系统服务的样子,在使用了rc.local大法一段时间后,我决定将整个应用弄成系统服务的样子——将它放入/etc/init.d中,让系统将它作为系统服务,在指定的优先级下在开机的时候自动启动,在关机之前自动关闭。
  当时,我正好学习了python语言,这个语言在openwrt中也有了良好的支持,我使用python语言将整个应用完善了一遍。这里需要啰嗦几句的是,不仅是三大运营商的pppoe拨号需要靠某拨号软件(该软件Windows才能使用),就连我们学校的校园网也需要靠那个软件登录校园网才能使用,为了功能的完整性,在前人对各udp包的研究的基础上,我将获取pppoe拨号权限和登录校园网的功能整合到了一起,用python完成了这个应用,跨平台也得到了保证。如此一来,路由器不仅可以拨三大运营商的宽带,也可以拨校园网了。
  完成了应用之后,要想做成系统服务,首先需要在/etc/init.d中写一个服务脚本,应用名假设为cnclient:

#!/bin/sh /etc/rc.common#校园网服务START=41STOP=88stop(){    ps | grep 'python /root/CNClient/cnclientservice.py' | awk '{print $1}' | xargs kill > /dev/null 2>&1}start(){    stop    python /root/CNClient/cnclientservice.py > /dev/null 2>&1 &}restart(){    start}

  服务脚本中/root/CNClient/cnclientservice.py即是我们所做的python应用脚本,其逻辑与上一篇文章所说的整合了断网重连后的启动项脚本connect一致。这里还定义了openwrt系统服务所需要的3个方法,stop、start、restart,功能就如字面上的意思。START=41、STOP=88提供了该服务的启动优先级和关闭优先级,这里可以进入/etc/rc.d中去比较、去选择。如/etc/rc.d中的S20network,说明,network启动优先级是20,那么我们需要我们的服务在network之后启动,我这里选择了41。定义了START=41之后还需要在/etc/rc.d里建立一个符号链接文件,链接到/etc/init.d/cnclient。由于启动优先级是41,所以符号链接文件的名称是S41cnclient,同理还有关于关闭优先级的K88cnclient文件(优先级在network之前,network是K90)。
  如此配置完毕后,每次路由启动,我们的应用就会自动启动了。使用/etc/init.d/cnclient start 或者 stop 或者 restart还可启动、关闭、重启服务。(写完这一系列文章后将会把python应用源码放在我的github,欢迎批评指正)

0 0
原创粉丝点击