码迷,mamicode.com
首页 > 系统相关 > 详细

linux设置开机启动

时间:2016-11-23 19:32:57      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:style   安装   列表   ide   data-   org   remote   end   proc   

知识小贴士

运行级别
简单的说,运行级就是操作系统当前正在运行的功能级别。

不同的运行级定义如下:
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式         进入方法#init s = init 1
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动 (千万不要把initdefault 设置为6 )

 

一. /etc/rc.local
(1)执行命令: 编辑"/etc/rc.local",添加你想开机运行的命令

(2)运行程序脚本:然后在文件最后一行添加要执行程序的全路径。

例如,每次开机时要执行一个hello.sh,这个脚本放在/usr下面,那就可以在"/etc/rc.local"中加一行"/usr/./hello.sh",或者" cd /opt && ./hello.sh "

 

二. /etc/init.d

Linux开机的时候,不是直接运行/etc/init.d下的所有脚本的,而是根据不同的runlevel来执行/etc/rc$runlevel.d 下的脚本。

这里的runlevel是用以区别系统的运行方式(例如单用户的runlevel,多媒体桌面的runlevel,服务器的runlevel都 不同)。

(1)我们首先把可执行脚本放到 /etc/init.d 下

(2)然后创建符号连接
 在 /etc下面有这么几个目录值得注意:

技术分享

(0,1... 6 代表启动级别 0代表停止,1代表单用户模式,2-5代表多用户模式,6代表重启)

它们的作用就相当于 redhat 下的 rc.d ,我们可以把脚本放到 rcS.d,然后修改文件名,给它一个启动序号,如:S88mysql.

不过最好的办法是放到相应的启动级别下面,具体作法:
  先把 mysql 放到 /etc/init.d目录下
  查看当前系统的启动级别 $ sudo runlevel
  设定启动级别 $ update-rc.d mysql start 98 2 .
(98 为启动序号,2是系统的运行级别,可自己调整,注意不要忘了结尾的句点)

现在我们到 /etc/rc2.d 下,就多了一个 S98mysql 这样的符号链接。

软链接:

 S  是start的简写、代表启动;
 K  是kill的简写、代表关闭;
 60 数字代表启动的顺序。60以后通常是比较保险的数字,因为别的服务都启动了;

 

推荐参考:

  http://www.cnblogs.com/wangkangluo1/archive/2012/04/20/2459036.html

  http://blog.chinaunix.net/uid-26000296-id-3986914.html

  http://www.cnblogs.com/gzggyy/archive/2012/08/07/2626574.html

 

在Ubuntu里,可以使用update-rc.d来把/etc/init.d/proxy安装到各个runlevel中。

root@localhost:~# update-rc.d proxy defaults 99
update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/proxy ...
   /etc/rc0.d/K99proxy -> ../init.d/proxy
   /etc/rc1.d/K99proxy -> ../init.d/proxy
   /etc/rc6.d/K99proxy -> ../init.d/proxy
   /etc/rc2.d/S99proxy -> ../init.d/proxy
   /etc/rc3.d/S99proxy -> ../init.d/proxy
   /etc/rc4.d/S99proxy -> ../init.d/proxy
   /etc/rc5.d/S99proxy -> ../init.d/proxy
update-rc.d后面有三个参数,分别是/etc/init.d下的脚本名字,默认安装方式,运行的优先级。优先级的数字越大,表示越迟运行,这里我们把自己写的服务放在最后运行。

如果要卸载随机启动的服务,执行update-rc.d -f proxy remove

在update-rc.d安装的时候提示了警告信息,是因为我们写的/etc/init.d/proxy太简陋了,连LSB的信息也没有提供。

update-rc.d: warning: /etc/init.d/proxy missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

只需要做一些小改动,就可以避免那个警告了。如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          proxy
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFO

case "$1" in
start)
        start-stop-daemon --start --background --exec /root/proxy.py
;;
stop)
        start-stop-daemon --stop --name proxy.py
esac
到此,一个最简单的随机启动服务写好了,看起来文章挺长的,但其实也就几个命令而已。
在下次开机启动的时候,proxy.py就会以root用户身份被自动运行。

 

把脚本注册为系统服务

可以看到“/etc/rc.d/init.d”下有很多的文件,每个文件都是可以看到内容的,其实都是一些shell脚本。
系统服务的启动就是通过“/etc/rc.d/init.d”中的脚本文件实现的。我们也可以写一个自己的脚本放在这里。
脚本文件的内容也很简单,类似于这个样子(例如起个名字叫做“hahad”):
. /etc/init.d/functions
start() {
        echo "Starting my process "
        cd /opt
        ./haha.sh
}
stop() {
        killall haha.sh
        echo "Stoped"
}
写了脚本文件之后事情还没有完,继续完成以下几个步骤:
chmod +x hahad                    #增加执行权限
chkconfig --add hahad             #把hahad添加到系统服务列表
chkconfig hahad on                #设定hahad的开关(on/off)
chkconfig --list hahad            #就可以看到已经注册了hahad的服务
 
这时候才完成了全部工作。 

 

  

linux设置开机启动

标签:style   安装   列表   ide   data-   org   remote   end   proc   

原文地址:http://www.cnblogs.com/ssooking/p/6094740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!