给 OpenWrt 写服务项的一次记录

你看这现在哪有教程啊…这都是大棚的教程

众所周知,OpenWrt 的服务项管理并不是 systemd,这就导致当我们想要整一个启动项的时候,难如登天,在经历了昨晚的抓狂(其实某人昨晚玩了一晚上冒险解谜游戏)之后,我终于学会了如何写一个简单的 OpenWrt 服务项。

先来看下 OpenWrt 给的一个服务项(init script)的例子

一个基本的服务项应包含以下几个部分

1
2
3
4
5
6
7
8
9
10
#!/bin/sh /etc/rc.common
    ##声明这是一个服务项
USE_PROCD=1
    ##声明这个服务项用 *[procd](https://openwrt.org/docs/guide-developer/procd-init-scripts)* 加载
START=95
    ##此服务的启动优先级为 95,会在启动优先级小于 95 的服务之前、大于 95 的服务之后运行,延伸阅读: #5 和 #6
STOP=01
    ##此服务的停止优先级为 01,会在停止优先级小于 01 的服务之后、大于 01 的服务之前停止运行,延伸阅读: #5 和 #6
start_service()
    ##定义脚本如何运行的

但以上的这些只是最基本的,具体使用时还需要「稍加修改」

例子

因为不想在手机上挂某些「科学」软件,于是就打算在 OpenWrt 上跑。因为性能有限(OpenWrt:你还想跑 GUI?给你个核心跑得了)只能跑核心了。

跑核心需要手动写服务项,因此就写了个。

附件#1

所需要的文件:

  • 一个位于 /root 目录下的文件夹 vs

  • 二进制文件 /root/vs/verysimple

  • 配置文件 /root/vs/client.toml

  • GeoIP 数据库 /root/vs/GeoLite2-Country.mmdb

跑其他的东西按照这个例子,照葫芦画瓢下就行。

免责声明:本人不对该例子及其衍生文件所造成的后果及影响承担任何责任!

修改完之后,注意用 dos2unix 转换一下,以免出现奇怪的问题。

然后将其复制到 OpenWrt 的 /etc/init.d/ 目录,即可在 OpenWrt 的 LuCI 上看到这个服务项了。

如果 OpenWrt 的 IP 是默认的,点这里可以跳转到启动项管理页面。

杂记(更碎一点的内容)

dos2unix

这玩意主要就是用来转换 dos 与 unix 系统之间的格式的,例如换行符 Windows 采用的是 \r\n ,而 Linux 采用的则是 \n

默认情况下,Windows 并不自带 dos2unix,但是 Git Bash 的 Cygwin 是自带的,因此可以用 Git Bash 来转换。

用法:

1
2
dos2unix.exe 转换目标
#建议直接把转换目标直接拖进 Git Bash(会自动补全路径)

参考内容

  1. 自己动手添加一个OpenWrt开机启动脚本 - HiLuf - 博客园 (cnblogs.com)

  2. 使用procd执行进程_东升的博客-CSDN博客

  3. [OpenWrt Wiki] procd init script parameters

  4. [OpenWrt Wiki] Create a sample procd init script

  5. openwrt脚本启动顺序说明与添加自启动脚本_天街小雨的博客-CSDN博客_openwrt 启动脚本

  6. [OpenWrt Wiki] Init Scripts