Debian vps设置软件开机自启动

文章目录

很多时候我们需要为安装的软件设置开机自启动,之前对这块知识不是非常的明了,今天总结一下关于debian vps开机自启的相关知识,方便有需要的同学。

debian启动过程

linux的启动过程一文中,我介绍了linux启动所需的过程,其中,在第五步时会运行init进程。init进程会读取配置文件/etc/inittab,然后分别执行系统初始化及启动相应运行级别的系统服务。

1、系统初始化

init进程会首先执行sysinit脚本进行系统初始化,由于发行版的不同,sysinit脚本所在路径也不同,在debian中,它的路径为/etc/init.d/rcS。实际上,它会执行/etc/rcS.d中的脚本,而所有系统初始化相关的脚本也都在/etc/rcS.d中。初始化内容包括:

init $PATH
config network
start swap function
set hostname
check root file system, repair if needed
check root space
……

2、启动默认运行级别服务

接下来,init程序会执行默认运行级别中的服务脚本,默认运行级别一般在/etc/inittab文件中指定。Linux有7个运行级别,分别为:

0     系统停机状态           
1     单用户或系统维护状态    
2~5  多用户状态             
6     重新启动               

在机器引导时,init进程从运行级0开始,一级一级往上运行到在/etc/inittab中所设置的默认运行级别。

Debian系统默认运行级别为2,也就是说系统默认运行在多用户状态下。在/etc目录下,针对不同运行级别相应的有rc0.d、rc1.d、、、rc6.d这样七个目录,对应着每个运行级别。执行到相应运行级别时,会执行这些目录下的脚本。

rcN.d目录中放置的是init.d中脚本的链接(N = 0 ~ 6),事实上,在任一个/etc/rcN.d/目录下的文件都是一个到/etc/init.d/的符号链接。/etc/rcN.d/目录下文件命名方式决定了哪个脚本将会运行,”K”开头的在进入该运行级别时默认在执行,执行相应的脚本,会杀掉该服务。而所有S开头的,则在进入运行级别时,会被执行。字母之后的两位数字指定启动的顺序,较小的数字将先被执行。

3、/etc/rc.local

rc.local也是常使用的一个脚本。该脚本是在多用户运行级别结束后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。

设置软件自启动方法

常用的有两种方法:修改/etc/rc.local及添加开机服务。推荐第二种方法。

1、修改/etc/rc.local

编辑/etc/rc.local

1
vi /etc/rc.local

在在 exit 0 前面添加好脚本代码,以shadowsocks为例:

1
2
/etc/init.d/shadowsocks-libev start
exit 0

2、添加开机服务

首先需要将开机服务脚本放置在/etc/init.d/目录下。

关于开机服务脚本的编写,请参考:Debian下开机服务脚本的编写

然后采用如下方式添加服务

1
update-rc.d xxx defaults

事实上该命令的作用是在rc0.d、rc1.d、、、rc6.d六个目录下建立软连接。

同样以shadowsocks为例,首先查看下/etc/init.d/目录下有没有shadowsocks-libev,经过查看确实有。
然后执行以下命令:

1
update-rc.d shadowsocks-libev defaults

这样就可以了。

如果想移除该开机服务,可以使用如下代码

1
update-rc.d -f xxx remove

小结

上面介绍了设置debian开机自启动的两种方法:修改/etc/rc.local及添加开机服务法。

本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/2940.html

下一篇文章:

上一篇文章:

4人参与了讨论

  1. 琉璃瓦 说:

    启动过程之后,init程序执行默认运行级别中的起动机脚本

  2. 屠夫9441 说:

    我的debian6在rc.local里面加了一段代码,但是开机不会自动执行,手动执行这段代码才有用。这是为什么呢?是用来启动一个加速服务的代码,nohup /net_speeder/net_speeder venet0 “ip” >/dev/null 2>&1 &

    • tennfy 说:

      路径一定要写全,/net_speeder在哪个路径下

      • 屠夫9441 说:

        就是在根目录下,路径是对的,手动运行也可以,应该就是rc.local没有正常执行的原因。我google了一下也有人遇到过rc.local不执行的情况,但好像跟我的情况都不一样,我的rc.local并不是一个软链接,权限也没有问题。最后不得已我在init.d下面自己又添加了一个脚本才实现了开机自动启动……

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

9 + 8 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部