首页 > 代码库 > linux设置开机启动
linux设置开机启动
知识小贴士
运行级别
简单的说,运行级就是操作系统当前正在运行的功能级别。
不同的运行级定义如下:# 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 99update-rc.d: warning: /etc/init.d/proxy missing LSB informationupdate-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/proxyupdate-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 informationupdate-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 INFOcase "$1" instart) start-stop-daemon --start --background --exec /root/proxy.py;;stop) start-stop-daemon --stop --name proxy.pyesac到此,一个最简单的随机启动服务写好了,看起来文章挺长的,但其实也就几个命令而已。在下次开机启动的时候,proxy.py就会以root用户身份被自动运行。
把脚本注册为系统服务
可以看到“/etc/rc.d/init.d”下有很多的文件,每个文件都是可以看到内容的,其实都是一些shell脚本。系统服务的启动就是通过“/etc/rc.d/init.d”中的脚本文件实现的。我们也可以写一个自己的脚本放在这里。脚本文件的内容也很简单,类似于这个样子(例如起个名字叫做“hahad”):. /etc/init.d/functionsstart() { 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设置开机启动