Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
api:rc:zh [2023/11/30 07:41]
hfsr [RC脚本方法]
api:rc:zh [2023/11/30 08:01]
hfsr [命令行界面]
Line 45: Line 45:
 \\ \\
 - `<​方法名>​([参数...])`  ​ - `<​方法名>​([参数...])`  ​
-  编写RC脚本时不仅可以定义`start`和`stop`方法,还可以定义任意多的方法。用户不会直接调用这些方法,而是利用RC控制器来间接调用它们。因此我们为RC控制器提供调用法,可用其调用任意名称的RC脚本方法。 ​  +  编写RC脚本时不仅可以定义`start`和`stop`方法,还可以定义任意多的方法。用户不会直接调用这些方法,而是利用RC控制器来间接调用它们。因此下文所示的通用调用法,RC控制器可用其调用任意名称的RC脚本方法。 ​  
-\\ +`rc <​模块名>​ <​方法名>​ [参数...]`  ​
-`rc <​模块名>​ <​方法名>​ [参数...]`  ​+
 此处的`模块名`指你的RC脚本名称(即位于你的`/​etc/​rc.d/​`目录下的`.lua`文件名,不含后缀)。`方法名`指你在脚本文件中定义的全局方法。`参数...`是你想传递的任意命令行参数。甚至`start`和`stop`方法也可通过此方式调用。 此处的`模块名`指你的RC脚本名称(即位于你的`/​etc/​rc.d/​`目录下的`.lua`文件名,不含后缀)。`方法名`指你在脚本文件中定义的全局方法。`参数...`是你想传递的任意命令行参数。甚至`start`和`stop`方法也可通过此方式调用。
  
 ==== RC脚本配置 ==== ==== RC脚本配置 ====
  
-你可以在`/​etc/​rc.cfg`文件中定义脚本配置 ​(语法必须符合lua可读取的标准)。假设你的RC脚本位置在`/​etc/​rc.d/​foo.lua`,则模块为`foo`,其在配置文件中的字段名称(键名)也需要为`foo`。OpenOS提供的样例RC脚本`example`也涉及了这一点。此模块的脚本文件为`/​etc/​rc.d/​example.lua`,同时`/​etc/​rc.cfg`配置文件中有:+你可以在`/​etc/​rc.cfg`文件中定义自己的脚本配置语法必须符合lua可读取的标准。假设你的RC脚本位置在`/​etc/​rc.d/​foo.lua`,则模块名为`foo`,其在配置文件中的字段名称(键名)也需要为`foo`。OpenOS提供的样例RC脚本`example`也涉及了这一点。此模块的脚本文件为`/​etc/​rc.d/​example.lua`,同时`/​etc/​rc.cfg`配置文件中有:
  
 ```lua ```lua
Line 59: Line 58:
 ``` ```
  
-`enabled`列表由[[api:​rc:​zh#​RC控制器|控制器]]维护,但`example`字段中存储的是`example`RC脚本的配置。字段的值可以是任何lua值,不只是字符串。当然也包含表。脚本的配置值会被加载到你的脚本环境中。在你的脚本中你可以通过的全局字段名称`args`来访问你的配置。请再回头查看`example.lua`脚本的代码,注意它对`args`变量的用法。你的脚本和配置只会由控制器加载和缓存一次。+`enabled`列表由[[api:​rc:​zh#​RC控制器|控制器]]维护,但`example`字段中存储的是`example`RC脚本的配置。字段的值可以是任何lua值,不只是字符串。当然也包含表。脚本的配置值会被加载到你的脚本环境中。在脚本中你可以通过名为`args`的全局字段来访问你的配置。请再回头查看`example.lua`脚本的代码,注意它对`args`变量的用法。你的脚本和配置只会由控制器加载和缓存一次。
  
 ===== RC控制器 ===== ===== RC控制器 =====
  
-RC控制器提供了一个命令行接口,你可以在shell中通过`rc`(`/​bin/​rc.lua`)访问。还提供了一个运行库,你可以通过`require("​rc"​)`来访问。 +RC控制器提供了一个命令行接口,你可以在shell中通过`rc``/​bin/​rc.lua`访问。还提供了一个运行库,你可以通过`require("​rc"​)`来访问。 ​  
-RC控制器维护着一份列表,表中记录了配置为开机时启动rc脚本。RC控制器中还缓存了已加载的RC脚本。 +RC控制器维护着一份列表,表中记录了配置为开机时执行RC脚本。RC控制器中还缓存了已加载的RC脚本。 ​  
-不像其他自启动设置,如autorun和`.shrc`,启用的RC脚本只会在OpenOS启动时自动执行一次。+不像其他自启动方案,如autorun和`.shrc`,启用的RC脚本只会在OpenOS启动时自动执行一次。
  
-==== 命令行界面 ​==== +==== 命令行接口 ​====
- +
-`rc` +
- +
-调用所有被启用的RC脚本的`start`方法 +
- +
-`rc <​模块名>​ enable` +
- +
-将名为<​模块名>​的RC脚本添加到“自启动”RC脚本的列表中。下次开机启动时将会自动调用<​模块名>​.start()。 +
- +
-`rc <​模块名>​ disable` +
- +
-将名为<​模块名>​的RC脚本从“自启动”RC脚本的列表中移除。下次启动时名为<​模块名>​的脚本不会自启动。 +
- +
-`rc <​模块名>​ restart` +
- +
-如果名为<​模块名>​的脚本同时定义了`stop()`和`start()`方法,则依次调用它们。 +
- +
-`rc <​模块名>​ <​方法名>​ [参数...]`+
  
 +`rc`  ​
 +调用所有启用的RC脚本的`start`方法。  ​
 +\\
 +`rc <​模块名>​ enable`  ​
 +将名为<​模块名>​的RC脚本添加到“自启动”RC脚本的列表中。下次开机启动时将会自动调用<​模块名>​.start()。  ​
 +\\
 +`rc <​模块名>​ disable`  ​
 +将名为<​模块名>​的RC脚本从“自启动”RC脚本的列表中移除。下次启动时名为<​模块名>​的脚本不会自启动。  ​
 +\\
 +`rc <​模块名>​ restart`  ​
 +若名为<​模块名>​的脚本同时定义了`stop()`和`start()`方法,则依次调用它们。  ​
 +\\
 +`rc <​模块名>​ <​方法名>​ [参数...]`  ​
 调用名为<​模块名>​的RC脚本中定义的<​方法名>​方法,如果有[参数...],则将它们作为函数参数传递给此方法。 调用名为<​模块名>​的RC脚本中定义的<​方法名>​方法,如果有[参数...],则将它们作为函数参数传递给此方法。
 ==== RC API ==== ==== RC API ====