不同运行级别下自动启动和关闭进程
时间:2005-12-24 来源:AmosHe
整理自:http://forum.ubuntu.org.cn/viewtopic.php?t=5303&start=0&postdays=0&postorder=asc&highlight=%E5%90%8C%E6%AD%A5
/etc/rcS.d/目录中的内容是在启动时自动运行的脚本,一般用于初始化程序,启动daemon
目录内文件的命名规则是Xnnaaaaaa,X可以为S或K,S是指启动这个程序,K指停止这个程序;nn是两位数字,指定这个程序的启动顺序,越小越先启动;aaaaaa为程序的名字,长度任意,其实这一段没有意义,具体启动那个程序要看这个符号链接是指向那个文件。举个例子
代码: |
$ cd /etc/rcS.d/ $ ls -l S* S02mountvirtfs S30procps.sh S40networking S04udev S35mountall.sh S41hotplug-net S05bootlogd S36mountvirtfs S48console-screen.sh S05keymap.sh S36udev-mtab S50alsa-utils S07hdparm S38pppd-dns S50hwclock.sh S10checkroot.sh S39dns-clean S51ntpdate S15linux-restricted-modules-common S39ifupdown S55bootmisc.sh S18ifupdown-clean S39readahead S55urandom S20module-init-tools S40hostname.sh S70screen-cleanup S22hwclockfirst.sh S40hotplug S70xorg-common S30checkfs.sh S40ifrename S75sudo $ ls -l S51ntpdate lrwxrwxrwx 1 root root 17 2005-10-25 00:51 S51ntpdate -> ../init.d/ntpdate |
S51ntpdate,以S开头表示要启动它;51表示它将会比S50hwclock.sh先启动,比S55bootmisc.sh后启动;ntpdate无意义,只做说明和区分其它S51开头的程序;它为符号链接,指向../init.d/ntpdate,也就是/etc/init.d/ntpdate。于是启动时系统就会运行
代码: |
/etc/init.d/ntpdate start |
如果把名字改为K51ntpdate,那么系统启动时会运行
代码: |
/etc/init.d/ntpdate stop |
当然,扯远一点,这里如果要关闭启动时寻找ntp.ubuntu.com,则改为K51ntpdate在我看来不是最好的办法,在rcS.d里面放Knnaaaaaa似乎没有太大意义,要么把这个文件删掉,或者改为_Snnaaaaaa,这样也不会启动,也不会运行停止脚本,而且ls的时候依然是排序的,另外有些时候update软件的时,会自动把K变成S,用_Snnaaa的话就可以看出来是否添加了自己之前已经不要的启动项。
再比如,要在启动时运行tomcat
如果装好了tomcat,那应该有/etc/init.d/tomcat吧,那么:
代码: |
sudo ln -sf ../init.d/tomcat /etc/rcS.d/S70tomcat |
70也可以是别的数值,看你需要,不过要大于40,最好在60以后,因为40以后才有网络,60以后才对过表,具体见/etc/rcS.d/README。
如果是解压版的tomcat,比如是运行/path/tomcat -a 1 -b 2
那就写个脚本S70tomcat
代码: |
#!/bin/sh /path/tomcat -a 1 -b 2 |
然后放到/etc/rcS.d/目录里就可以了。
正常的服务脚本应该有1个参数,此参数有一下几种可能
start: 启动服务
stop: 停止服务
restart: 重启服务,大部分都是通过stop然后start实现的
reload: 重新读取配置
force-reload: 强迫重新读取配置,比较常见就是restart
当然如果要简化的话就不必考虑这些了,就像上面那个例子一样,一律看成start
而现命令是/opt/tomcat/bin/startup.sh
那就很简单了,直接
代码: |
ln -sf /opt/tomcat/bin/startup.sh /etc/rcS.d/S70tomcat |
以后启动时tomcat也就自动启动了。假设还有/opt/tomcat/bin/shutdown.sh用于停止tomcat服务,那么
代码: |
ln -sf /opt/tomcat/bin/shutdown.sh /etc/rc0.d/K10tomcat ln -sf /opt/tomcat/bin/shutdown.sh /etc/rc6.d/K10tomcat |
就可以在关机和重启机器时自动关闭tomcat了。
另外启动和关闭是都是以root权限执行/etc/rcN.d/里面的程序的,所以无所谓sudo啦。
关于此方面介绍的文档可直接查看脚本文件,不过脚本都放在/etc/里面了,这些脚本注释得都很好,有什么不明白的就直接读一下脚本好了。比如之前讨论的启动或切换runlevel会做那些操作,只要看一下/etc/init.d/rc就明白了。
如果还对启动到runlevel之前,也就是linux在initrd阶段做什么感兴趣,则可以
代码: |
gunzip -c /boot/initrd.img-******-**-** | cpio -i |
然后读读里面的脚本。