WithCoderWithCoderWithCoder

Ubuntu通过 Update-rc.d 或 rc.local 设置开机启动执行脚本

    因为要对外提供一个演示的后台系统,内网服务器使用的是Ubuntu系统,然后使用内网穿透工具ngrok对外提供一个测试网址。测试成功后,因为每次开关机后需要重新启动内网穿透工具ngrok的命令,所以想着能把这个命令设置为开机自启动。因是第一次在ubuntu系统上设置开机启动,网络搜索了解决方案又折腾了半天时间,终于设置成功。本文把设置的方法记录下来,以备后续参考。

    一、Linux 系统主要启动步骤

  1. 读取 MBR 的信息,启动 Boot Manager。

  2. 加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。

  3. init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。

  4. 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。

  5. 启动登录管理器,等待用户登录。

    二、Ubuntu系统运行级别

    • 0  系统停机状态

    • 1  单用户或系统维护状态,只允许root用户对系统进行维护

    • 2~5 多用户状态,其中3为字符界面,5为图形界面

    • 6  重新启动

    切换运行级别

init [0123456Ss]

    例如:init 0 命令关机; init 6 命令重新启动

    三、常用的两种开机执行脚本的方法有以下两种

    3.1 通过 update-rc.d 管理ubuntu开机启动  

    update-rc.d是一个Perl脚本,是用来自动升级System V类型初始化脚本,简单来说就是哪些东西是你想要在系统引导初始化的时候运行的,哪些是希望在关机或重启时候停止的,你都可以用它来设置。这些脚本的链接位于/etc/rcN.d/下(N代表0~6),对应脚本位于/etc/init.d/下。

    命令格式:

    3.1.1  按指定顺序、在指定运行级别中启动或关闭

        3.1.1.1 设置启动项:

update-rc.d <serviceName> start <order> <runlevel>

       3.1.1.2 设置停止项:

update-rc.d <serviceName> stop <order> <runlevel>

        3.1.1.3 设置启动和停止可以写在一起:

update-rc.d <serviceName> start|stop <order> <runlevels>

        举例:update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 .

        解析:表示在2、3、4、5这五个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这三个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:

update-rc.d apachectl defaults

        3.1.1.4 启动和关闭级别默认,顺序为指定值NN

update-rc.d <serviceName> defaults NN     # NN是一个决定启动顺序的两位数字值

    3.1.2  从所有的运行级别中删除指定的启动项

update-rc.d -f <serviceName> remove

        可选参数 -f 是强制删除符号链接,即使/etc/init.d/apache2仍然存在。

    举例(增加开机启动脚本):

        a. 新建一个脚本文件 mystart.sh        

#!/bin/bash
# command content 

echo "hello world" > /usr.local/test.log
exit 0

        b.  设置权限

sudo chmod 755 mystart.sh
#或者
sudo chmod +x mystart.sh

        c.把脚本放置到启动目录下

sudo mv mystart.sh /etc/init.d/

        d.将脚本添加到启动脚本

cd /etc/init.d/sudo update-rc.d mystart.sh defaults 90

        e.移除Ubuntu开机脚本

sudo update-rc.d -f mystart.sh remove

    3.2 通过 rc.local 设置ubuntu开机启动

    rc.local脚本是一个Ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令。该脚本位于 /etc/ 路径下,需要root权限才能修改。    

    通过rc.local设置开机启动比较简单。rc.local 运行在runlevel为2,3,4,5,并且运行优先级为99,也就是最低的优先级,因此我们也可以把需要开机启动的脚本加入到rc.local里面去。

    该脚本具体格式(举例)如下:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo "hello world" > /usr/local/test.log
exit 0

    注意: 

        一定要将命令添加在exit 0之前。里面可以直接写命令或者执行Shell脚本文件sh。

    ubuntu开机启动最常用的是这两种方法,不过推荐使用第一种 update-rc.d 管理,因为这样灵活性更高,并可以解决相关依赖。


欢迎分享交流,转载请注明出处:WithCoder » Ubuntu通过 Update-rc.d 或 rc.local 设置开机启动执行脚本