分类: LINUX
2013-07-03 15:56:31
问题分为两部分:shell+开机运行。
这一节写我设置开机启动项遇到的一些问题和结局。
由于linux有很多发行版,有些许小的差异。我这里记录的是ubuntu12.04桌面版。
在ubuntu里是没有rc.d这个文件夹的。
在/etc下有rc0.d rc1.d 一直到rc6.d 每个数字对应一个启动级别。
那么什么是启动级别,又如何添加呢?
这里指出很多博客中没有特别说明的问题。RedHat等版本和Debian的启动级别有差异
RedHat
等级0 停机,用来停止所有服务和为关机做准备的。
等级1 停止所有服务并使系统进入单用户模式
等级2 多用户但不带NFS 如果要禁止一个服务,要把名字S改为K,然后运行update-rc.d
运行等级3 标准(正常多用户)
等级4 保留(未使用)
等级5 图形界面
等级6 准备重启
Debian 0 1 6一样,但是2-5都是多用户GUI启动界面。
单独讲讲启动级别。里面设计到一些常用的小技巧。
1.如何设置启动级别?其实在ubuntu下实在没有设置启动级别的必要,因为都是一样的。
但这种方法其实可以拓展到其他版本。
方法一:在 etc/init/rc-sysinit.conf 里面可以修改默认等级,就是DEFAULT_RUNLEVEL的设置,自己改就可以了。查看当前登陆的默认等级,可以使用runlevel命令。
方法二:因为通过grub启动的时候会传递参数,这个参数会覆盖默认值(就像当前大多数服务器设置端口号一样),直接空格添加一个i阿数字(0到6)就OK
方法三:在系统中保存了一份参数的默认值,也可以修改这里面的参数默认值
参数的位置在proc/cmdline。 直接空格添加一个数字(0到6)就OK
(原因呢就是在rc-sysinit.conf这个文件里他是用空格分割参数的,你一看代码就明白了)
2.但现在出现一个问题。我的ubuntu12.04看不到grub界面。
解决方法:打开etc/grub.d/30_os-prober 将timeout=0改为大一点的数值就可以。
3.在ubuntu下默认等级都是一样的,那么如何从命令行启动呢?
有两种方法,一种就是设置默认格式,一种是进入grub通过设置参数来修改。
这里介绍下设置默认格式。
网上方法很多,我尝试了两种,这里介绍下
方法一:sudo vim /etc/default/grub
发现LINUX_DEFAULT="quiet splash"也就是图形化启动,改为text就OK
然后更新grub:sudo update-grub
方法二:sudo vim /etc/X11/default-display-manager
文件记录了一个路径。直接注视掉,然后写一句false。OK
(但这个方法这我这里,每次需要手动按Ctrl+Alt+F1进入tty1.不知道哪里设置错了,懒得试了,大家感兴趣的可以试试。)
现在大家知道怎么设置启动级别了,也知道启动级别对应的不同的作用了(ubuntu用户就当没看到这句话把...)。
我们可以在对应的启动级别下添加启动项了。
这里拿rc2举例,说三种方法。
第一种,最简单的,sudo apt-get sysv-rc-conf。安装一个启动项工具。傻瓜式操作。不解释了。
第二种,进入rc2.d文件夹,这里面都是/etc/init.d下脚本的软链接。(没发现这里用软链接的好处,但系统用我也这么用了) 把自己写的脚本先ln -s一个到/etc/init.d 然后在以init.d目录下的软链接为源文件,软链接到改目录下。
文件准备好了,剩下一步就是改名。
S开头的是可以运行的,K开头的是不运行的。
都是SXXname来命名。这里的XX是数字,但我没明白数字的含义,可能是启动顺序把,我设置了一个大的数字,防止我的脚本调用的时候一些系统服务没起来,调用失败。
这样就OK了
第三中,所有rcn.d下有一个文件S99rc.local。是一个到/etc/rc.local的软链接,执行一些初始化的操作。可以在末端加入脚本调用指令。
(RedHat下貌似这个是最后执行的启动文件)
这里呢附两篇文章,从BIOS加电一直到启动成功的流程
http://www.cnblogs.com/myitm/archive/2011/10/16/2214448.html
第二篇更详细的介绍了软件启动部分。可以参考下