/etc/rc.common的解释

(找不原网址了)

1、在shell脚本的头部出现 "#!/bin/sh /etc/rc.common",如果该脚本为x.sh,
如果执行命令为 ./x.sh parameters,即为运行 /etc/rc.common x.sh parameters,这说明 /etc/rc.common用于解析x.sh命令行参数

 

由于openwrt使用自己的初始script系统,所有的initscript必须使用/etc/rc.common作为wrapper安装在/etc/init.d/<name>下。

如/etc/init.d/httpd:

#!/bin/sh/etc/rc.common

# Copyright (C)2006 OpenWrt.org

START=50

start() {

    [ -d /www ] && httpd -p 80 -h /www-r OpenWrt

}

stop() {

    killall httpd

}

从上可以看出,script本身并不解析命令行参数,而是由/etc/rc.common来完成。

Start和stop是最基本的功能,几乎所有init script都要提供。Start是在运行/etc/init.d/httpdstart时来调用,可以是系统启动时,或用户手动运行此脚本时。

通过/etc/init.d/<name> enable/disable可以启用或禁止模块的初始化脚本,他是通过创建或删除/etc/rc.d中的符号连接来完成,而这些符号连接是/etc/init.d/rcS在启动阶段处理。

脚本运行的顺序是在初始脚本中通过变量START来定义,改变后需要再次运行/etc/init.d/<name>enable。

/etc/rc.common说明

#!/bin/sh                                

# Copyright (C)2006-2011 OpenWrt.org   

                                         

.$IPKG_INSTROOT/lib/functions.sh        

.$IPKG_INSTROOT/lib/functions/service.sh

                  

initscript=$1     

action=${2:-help}   

shift 2            

                    

start() {                                 

        return 0                                

}                                               

                                                

stop() {                                       

        return 0                                

}                                               

                                               

reload() {                                

        return 1                                                           

}                                                                          

                                                                           

restart() {                                                                                            

        trap '' TERM                                                                                 

        stop "$@"                                                                                      

        start "$@"                                                                                    

}                                                                                                     

                                                                                                      

boot() {                                                                                             

        start "$@"                                                   

}                                                                          

                                                                           

shutdown(){                                                               

        stop                                                                                          

}                                                                                                     

                                                                                                      

disable(){          禁止服务开启                                                                                 

        name="$(basename"${initscript}")"                                                            

        rm -f"$IPKG_INSTROOT"/etc/rc.d/S??$name                                                     

        rm -f"$IPKG_INSTROOT"/etc/rc.d/K??$name                           

}                                                                          

                                                                           

enable() {          开启服务                                                                                   

        name="$(basename"${initscript}")"                                                            

        disable                                                                                       

        [ -n "$START" -o -n"$STOP" ] || {                                                            

                echo "/etc/init.d/$namedoes not have a START or STOP value"                           

                return 1                                                                              

        }                                                                                             

        [ "$START" ] && ln -s"../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}"

        [ "$STOP"  ] && ln -s"../init.d/$name""$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}"

}

enabled(){                                                                                          

        name="$(basename"${initscript}")"                                                            

        [ -x"$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]                                

}                                                                     

                                                                           

depends(){                                                               

        return 0                                                           

}                                                                                                      

                                                                                                      

help() {                                                                                               

        cat <<EOF                                                                                    

Syntax:$initscript [command]                                                                        

                                                                                                     

Availablecommands:                                                        

        start  Start the service                                          

        stop   Stop the service                                            

        restart Restart the service                                                                  

        reload Reload configuration files (or restart if that fails)                                 

        enable Enable service autostart                                                              

        disable Disable service autostart                                                            

$EXTRA_HELP                                                                                            

EOF                                                                                                   

}                                                                                                     

                                                                                                      

."$initscript"          引用脚本                                                                           

                                                                     

ALL_COMMANDS="startstop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"  所有命令,包括标准的,及定制的

list_containsALL_COMMANDS "$action" || action=help                                                   

["$action" = "reload" ] && action='eval reload"$@" || restart "$@" && :'                             

$action"$@"

重载初始化脚本函数

可以通过如下方式覆盖这些标准的初始化脚本函数:

{boot()},boot时支持的命令,缺省为start。

        Commands to be run at boot time.Defaults to {start()}

{restart()} 重启动服务,缺省为stop然后再start。

        Restart your service. Defaults to{stop(); start()}

{reload()} 重新载入配置文件,缺省是restart。

        Reload the configuration files for yourservice. Defaults to {restart()}

定制脚本命令

也可定制命令,创建功能函数,在EXTRA_COMMANDS变量中引用,Helptext添加在EXTRA_HELP中。

如下:

status() {

    # print the status info

}

EXTRA_COMMANDS="status"

EXTRA_HELP="        status Print the status of the service"

在/etc/rc.common中可以看出,会包含此脚本,从而包含了其中的所有定义,从而可正确地去使用。

_____________________________________________________________________________________________

例如:

parse.sh

#!/bin/sh

. $1
start_test

test.sh

#!/bin/sh  ./parse.sh


start_test()
{
        echo "hello,world!"
}

执行: ./test.sh

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在Linux系统中,/etc/rc.d/rc.local是一个脚本文件,用于在系统启动时自动执行一些命令或进程。它通常用于用户自定义的启动脚本。然而,有些Linux发行版可能没有这个文件。引用\[2\]:如果您的系统中没有/etc/rc.d/rc.local文件,您可以尝试其他方法来实现在系统启动时自动执行命令或进程。一种方法是使用/etc/profile.d/目录。您可以在该目录下创建一个脚本文件,并在其中添加您要启动的进程命令。另一种方法是使用crontab工具,通过编辑crontab文件来设置在系统启动时执行命令或进程。引用\[3\]:另外,您还可以手动控制服务的启动和停止。您可以使用/etc/init.d/目录中的启动脚本来启动、停止或重启服务。如果您想禁止某个服务在启动时自动运行,您可以将相应运行级别中的启动脚本链接由"S##xxx"重命名为"K##xxx"。 #### 引用[.reference_title] - *1* [linux中/etc/rc.d/目录和/etc/rc.d/rc.local文件的详解](https://blog.csdn.net/ymeng9527/article/details/102677254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [linux程序设置开机自动启动/etc/rc.d/rc.local, /etc/profile.d/](https://blog.csdn.net/qq_38156743/article/details/130193984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [linux系统脚本启动顺序 /etc/rc.d/ 与/etc/rc.d/init.d](https://blog.csdn.net/u013921164/article/details/118176417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值