当前位置: 首页 > news >正文

openwrt 之 procd init 脚本

1,引入

        在openwrt中,/ect/init.d/*有很多脚本,在/etc/rc.d/下 会有这个 脚本的软连接,其中以数字开头(start = 99,相同时以首字母为调用顺序),这些脚本用于管理进程的启动,这些进程的启动和脚本都由守护进程--procd管理,下面解释procd init脚本的使用方法。参考链接:

[OpenWrt Wiki] Procd Init Scripts

2,procd init脚本接口的使用

查看当前服务支持的CMD行:

/etc/init.d/rs_mytest  [arg] :不带任何[arg]参数,查看当前支持的CMD

上面的脚本中增加了一个自定义的CMD--custom (也可增加多个),如何使用这个命令:

/etc/init.d/rs_mytest  custom

下面是procd init 脚本的一下接口API:

#!/bin/sh /etc/rc.commonUSE_PROCD=1注:
/etc/rc.common 脚本中定义了很多函数,如start_service等,
我们需要再自己的脚本中去复写这些函数体。
procd_open_instance  :打开一个实例,配置完,调用procd_close_instance关闭实例。
procd_set_param command   /usr/sbin/mytest :配置执行的命令
procd_append_param command -p 8 :追加命令行参数
service_start():procd_set_param env my_env_var=function :为进程传递环境,进程可以通过get_env获取该环境变量procd_set_param limits core="unlimited":为进程设置ulimit参数procd_set_param file /var/etc/your_service.conf :为进程设置,当/var/etc/your_service.conf 这个文件改变了的话,将调用reload重启这个deamoreprocd_set_param stdout 1 procd_set_param stderr 1 :将标准输出和标准输入重定向到logd中,同时等级为infoprocd_set_param pidfile /var/run/somefile.pid:程序启动时写入自己的pid到这个文件,方便其他进程查看该服务是否运行service_triggers()procd_add_reload_trigger "file1 file2"::当配置文件file1或file2改变时,执行reload_config,将会通过ubus广播config.change消息,才会再去执行这个reloadprocd_add_interface_trigger:->需要配合    procd_set_param netdev eth0.2 使用 如:start_service ->增加    procd_set_param netdev eth0.2service_triggers ->增加    procd_add_interface_trigger "interface.*" "wan" /etc/init.d/myservice restart

3,一个例子

#!/bin/sh /etc/rc.commonUSE_PROCD=1
START=99
STOP=99
PROGRAM=/usr/sbin/mytest
EXTRA_COMMANDS="custom"
EXTRA_HELP="--        custom help for the custom command"service_triggers() {procd_add_reload_trigger "rs_mytest"
}start_service()
{procd_open_instanceprocd_set_param command $PROGRAM procd_append_param command -p 8procd_set_param stdout 1procd_close_instance
}
custom() {echo "mytest is a test cmd." 
}

4,一些小方法

//判断一个服务是否启动中
/etc/init.d/rs_mytest enabled && echo on//脚本在还可追加
boot() {echo "在设备起来时,调用一次"
}
shutdown() {echo "在设备关机时,调用一次"
}
http://www.xdnf.cn/news/403381.html

相关文章:

  • vue3配置element-ui的使用
  • Java SE所需工具与常见类型和运算符介绍
  • Docker原理与使用教程
  • ZYNQ笔记(二十):Clocking Wizard 动态配置
  • 不定长滑动窗口---初阶篇
  • Vue学习百日计划-Gemini版
  • 【华为HCIP | 华为数通工程师】821—多选解析—第二十三页
  • 日志 Slf4j , Java 中使用
  • 服务器带宽基础知识
  • Neo4j 入门级使用
  • 【Git】GitHub上传图片遇到的问题
  • 告别卡顿,图片查看界的“速度与激情”
  • CentOS部署Collabora Online
  • 【Java学习】Lambda表达式
  • 【Linux】进程状态、优先级、切换和调度
  • 三层交换机,单臂路由(用DHCP自动配置ip+互通+ACL
  • Elasticsearch架构原理
  • 数据库原理期末考试速成--最后附带两套题
  • 项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
  • 【漫话机器学习系列】254.假设空间(Hypothesis Space)
  • 批量重命名bat
  • 当 AI 邂逅丝路:揭秘「丝路智旅」,用 RAG 重塑中阿文化旅游体验
  • Axure 纵向滚动隐藏滚动条 Axure 滑动开关(属性开关)on-off
  • 数据结构-树(2)
  • DVWA在线靶场-xss部分
  • 【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权
  • Nginx stream模块是连接级别的负载均衡
  • [计算机科学#14]:数据结构
  • 现代化水库运行管理矩阵平台如何建设?
  • DNS域名解析服务器的部署