debian下服务控制命令
Linux系统主要启动步骤
读取 MBR 的信息,启动 Boot Manager。加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。
init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/目录下的启动脚本首先被执行,然后是/etc/rcN.d/xy 目录。系统根据 /etc/rcN.d/ 文件夹中对应的脚本启动 X window 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。启动登录管理器,等待用户登录。
系统启动脚本
Debian GNU/Linux使用SysV模块作为系统初始脚本。与RedHat一样,debian使用一个扩展的SysV模块,而slackware主要是基于BSD的,并为了使用SysV模块而写了几个方便的脚本。本文着重介绍系统的启动流程、增加/删除启动项相关过程。不过从debian 8.0开始,系统使用了systemd机制来管制服务的启动停止,不在遵守Sys V的规范,所有这些控制工具在其上不一定好用了。
定位SysV目录
debian与大多数使用SysV模块的系统一样,将相关的目录存放在/etc目录之下。也就是说,SysV目录/etc/init.d是脚本自身,而/etc/rc1.d、/etc/rc2.d直到/etc/rc6.d是特殊运行级别的目录。而管理所有这些的脚本为/etc/rc.d/rc。然而RedHat7.2,是将SysV目录全部放在/etc/rc.d目录之下。也就是就说,RedHat使用/etc/rc.d/init.d,而不是 /etc /init.d。为了兼容性,RedHat创建了一些由/etc指向/etc/rc.d下相关目录的链接。
使用debian工具进行工作
RedHat包含了一些用于自动管理SysV初始脚本过程的工具,也就是chkconfig与service。debian 6 之前并没有包含这些工具,但是却提供相似的管理工具:update-rc.d与invoke-rc.d。
使用update-rc.d
debian:~# update-rc.d --help
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] defaults [NN | SS KK]
update-rc.d [-n] start|stop NN runlvl [runlvl] [...] .
-n: not really
-f: force
debian 的update-rc.d与RedHat的chkconfig工具相类似。然而chkconfig是一个二进制程序,而update-rc.d是一个 Perl脚本。这些工具有不同的命令行选项,但是却执行类似的功能。下表列出了update-rc.d的一些用法。如果要查看完整的信息,我们可以查阅相关的和手册页。
命令|功能
update-rc.d -f remove|从所有的运行级别配置目录中是删除指定的服务
update-rc.d start|配置服务在运行级别列表中按指定的顺序启动
update-rc.d stop|配置服务在运行级别列表中指定的顺序停止
update-rc.d与RedHat的chkconfig之间最大的不同就在于它是要设置所以指向/etc/init.d目录下服务脚本的运行级别链接,而chkconfig是要每一个运行级别单独配置服务。从本质上来说,这也就意味着每次我们使用update-rc.d改变一个运行级别,我们就不得不改变所有的。例如,下面的命令序列与命令chkconfig -level 2345 inetd off的作用相同:
$ update-rc.d -f inetd remove
$ update-rc.d inetd start 20 2 3 4 5 . stop 20 0 1 6 .
第一个命令移除了所有的指向/etc/init.d/inetd服务脚本的运行级别链接,-f标志将会使得update-rc.d即使在inetd脚本本身已经存在的情况仍然进行相应的处理。
第二个命令在每一个运行级别创建了一个服务级别为20的启动/停止脚本。例如,这会创建一个/etc/rc3.d/K20inetd的符号链接来禁止运行级别3中inetd的运行。(在这里我们要注意的是我们要显示的添加reboot与shutdown运行级别,即0和6,尽管其中所有的服务都会被设置成为“stop“)。作为另外的一个例子,下面所显示的命令将会在运行级别2到5允许inetd的运行,而在其他的运行级别中则被禁止:debian的update-rc.d最初看起来会叫人有一些迷惑。
例如:
update-rc.d script-name start 90 1 2 3 4 5 . stop 52 0 6 .
start 90 1 2 3 4 5 . : 表示在1、2、3、4、5这五个运行级别中,按先后顺序,由小到大,第90个开始运行这个脚本。
stop 52 0 6 . :表示在0、6这两个运行级别中,按照先后顺序,由小到大,第52个停止这个脚本的运行。
使脚本开机自动执行:update-rc.d apache2 defaults 99
update- rc.d命令,是用来自动的升级System V类型初始化脚本,简单的讲就是,哪些东西是你想要系统在引导初始化的时候运行的,哪些是希望在关机或重启时停止的,可以用它来帮你设置。这些脚本的连接位于/etc/rcn.d/LnName,对应脚本位于/etc/init.d/Script-name。对于已经存的启动脚本链接,必须将其 remove掉,再进行相关的操作。当然是自己写好的脚本放在该目录下,则该脚本必须遵守一定的规则,请参见笔者另外一篇文章:rhel和debian启动脚本编写
-----------------------------------------
使用invoke-rc.d控制相关服务
debian下与RedHat的service命令作用等同的命令为invoke-rc.d。这两个命令在大多数情况下的作用是完全相同的。例如,service inetd start与invoke-rc.d inetd start有相同的作用(启动inetd服务,相应的停止服务的命令为invoke-rc.d inetd stop)。invoke-rc.d命令也有一个额外的我们可以深入研究的命令参数,但是一般来说这两个命令是相同的。
# invoke-rc.d vsftpd restart
# invoke-rc.d –help
invoke-rc.d, Debian/SysVinit (/etc/rc?.d) initscript subsystem.
Copyright (c) 2000,2001 Henrique de Moraes Holschuh
Usage:
invoke-rc.d [options] [extra parameters]
basename - Initscript ID, as per update-rc.d(8)
action - Initscript action. Known actions are:
start, [force-]stop, restart, [force-]reload, status
WARNING: not all initscripts implement all of the above actions.
extra parameters are passed as is to the initscript, following the action (first initscript parameter).
...
/etc/inittab中的不同
主要配置系统初始化过程的文件是/etc/inittab。这个文件管理在系统启动时的脚本,下面的是与其他的发行版本中的inittab文件所不同的几个地方:
1)debian的默认运行级别是2。
2)debian并不会在/etc/inittab文件中中配置X Window系统显示管理器。
3)运行级别2与3是相同的,而运行级别4与5是相同的。
4)运行级别4与5只会运行一个虚拟终端,而运行级别2与3却会运行6个。
----------------------------------------------
小结:上面介绍了debian官方版本里所带有的相关工具,invoke-rc.d用于对当前系统运行的服务程序进行操作(启动、停止、重启、查看状态等),而 update-rc.d则用于对服务程序运行级别的修改。而redhat系列官方所带的工具有chkconfig、ntsysv、service。 chkconfig用于调整相关服务的运行级别,而ntsysv则是用于调整其开机是否自动启动的控制命令,service用来对服务进行(启动、停止、重启、查看状态等)。下面将介绍一些debian系列中的一些非官方的工具(需要通过网络源进行安装)。
目前系统服务可用的管理工具集:
依赖于图形系统
GUI 设置
点击菜单:System->Preferences ->Sessions,中文为:系统->首选项->启动应用程序.这里设置的是启动图形界面以后自动运行的程序。
修改配置文件
进入 ~/.config/autostart 目录 ,创建以名字加.desktop的文件,如: thunderbird.desktop(具体创建方法请参考其文档)。
不依赖于图形系统的
init
Linux 内核启动 init ,init进程ID是1,是所有进程的父进程,所有进程由它控制。
runlevel
查看当前的运行级别,Debian桌面默认是2。
Debian中的运行级别
0 - 停机(不要把initdefault设置为0 )
1 - 单用户模式(单用户模式,只允许root用户对系统进行维护)
2 - 多用户,但是没有NFS
3 - 完全多用户模式(字符界面)
4 - 基本不用
5 - X11(图形界面)
6 - 重新启动(千万不要把initdefault设置为6 )
可修通过修改 /etc/inittab 来修改启动级别
切换运行级别,执行命令:
init [0123456Ss]
即在 init 命令后跟一个参数,此参数是要切换到的运行级的运行级代号,如:用 init 0 命令关机;用 init 6 命令重新启动,/etc/rc2.d目录为runlevel=2环境(就是Debian默认情况)的启动项。
hto@debian:/etc/rc2.d$ ls
README S20nginx S20xinetd S50rsync S90binfmt-support S99grub-common
...
其中S表示启动,随后的数字表示启动的顺序,手动的话将S重命名为K,运行:
update-rc.d script defaults
update-rc.d用法示例
添加启动项,例如mysql
hto@debian:/etc/rc2.d$ update-rc.d mysql defaults
update-rc.d: warning: /etc/init.d/mysql missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql -> ../init.d/mysql
/etc/rc1.d/K20mysql -> ../init.d/mysql
/etc/rc6.d/K20mysql -> ../init.d/mysql
/etc/rc2.d/S20mysql -> ../init.d/mysql
/etc/rc3.d/S20mysql -> ../init.d/mysql
/etc/rc4.d/S20mysql -> ../init.d/mysql
/etc/rc5.d/S20mysql -> ../init.d/mysql
删除启动项
hto@debian:/etc/rc2.d$ update-rc.d -f mysql remove
Removing any system startup links for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql
/etc/rc1.d/K20mysql
/etc/rc2.d/S20mysql
/etc/rc3.d/S20mysql
/etc/rc4.d/S20mysql
/etc/rc5.d/S20mysql
/etc/rc6.d/K20mysql
可以禁用某个服务,不过比较麻烦,方便的方法是sysv-rc-conf。
在各runlevel下服务开机的增加/删除
sysv-rc-conf可查看/修改不同运行级别的启动项,可以发现Debian2-5之间的runlevel效果是一样的。需要对相关服务的运行级别做一个调整。我们可以采用选择性关闭的方法加速起动,提高系统性能。这里我们安装一个软件:apt-get install sysv-rc-conf。在这个软件里,可以用键盘的方向键移动,用空格选取,也可以直接用鼠标选取,最后用q保存退出。
rcconf
查看,修改当前运行级别的启动项,在redhat习惯了ntsysv,在debian下可借助于另一个工具,类似ntsysv,那就是rcconf。跟ntsysv一样的功能,决定其是否在开机时自启动。
bashrc
Debian默认shell为bash,.bashrc即为配置文件,在用户输入完用户名和密码后生效,可添加启动项目,在桌面环境下可从.profile和.xprofile桌面管理器(KDM、GDM等)读取配置。
查看KDM读取配置
cat /etc/kde4/kdm/Xsession
查看GDM读取配置:
cat /etc/gdm/Xsession
可见GDM会读取.profile和.xprofile配置文件。
随桌面启动的autostart
/etc/xdg/autostart
/usr/share/autostart
/usr/share/gdm/autostart
/usr/share/gnome/autostart
~/.config/autostart
~/.kde/share/autostart
~/.local/share/autostart
这些目录下的启动项目是这样的文件(举例)
Launchy.desktop
---------------------------------------------------
这些服务控制工具在各个版本的情况
在 debian 6.0 中使用 update-rc.d 无法控制启动项。在6.0之前'update-rc.d','invoke-rc.d'是可用的,6.0及7.0及现在的8.0这两个服务控制指令是可用的,不过使用时会警告用户这个工具将会失效并可能被移除,由于8.0使用了systemd的方式(放弃了之前一直使用System V style)来管理服务,这两个指令恐怕不再好用了吧。不过'insserv'指令在8.0上都是好用的,服务的启动停止指令'invoke-rc.d'在各个版本上都是好用的。
---------------------------------------------------
# update-rc.d -f server remove
update-rc.d: using dependency based boot sequencing
经查证,debian为规范管理启动项目,在系统里已经使用'insserv'来进行此类的操作。
insserv is a low level tool used by update-rc.d which enables an installed system init script (boot script) by reading the comment header of the script and calculating the dependencies between all scripts.
insserv是比较初级的服务启动工具,它会被update-rc.d调用用于处理启动脚本的注释头和在脚本间计算依赖关系。
Dependency based boot sequence
Debian was converted to order the boot sequence using the LSB fields in the header of each init.d script. This has removed several bugs in the former boot sequence, and now makes it easier to keep the sequence correct.
In Debian releases prior to 6.0, a service could be added with update-rc.d:
update-rc.d mydaemon defaults
Starting with Debian 6.0, the insserv command is used instead, if dependency-based booting is enabled:
insserv mydaemon
Where mydaemon is an executable init script placed in /etc/init.d. insserv will produce no output if everything went OK. Examine the error code in $? if you want to go sure.
Both the old and the new way requires an init script to be present in /etc/init.d. For dependency-based booting, the script needs to be an LSB init script.
更多信息,请参考:DependencyBasedBoot
----------------------------------------------------
debian下一些服务的名称和基本的解释:
acpi-support:这个是关于电源支持的默认是1,2,3,4,5下启动,我认为你可以把它调整到s级别。
acpid:acpi的守护程序,默认是2-5开启,我认为可以不用管。
alsa:alsa声音子系统,应该不用开启它。
alsa-utils:这个服务似乎取代了alsa,所以开启这个就可以了,我在S级别开启它。
anacron:这是一个用于执行到时间没有执行的程序的服务。
apmd:也是一种电源管理,我认为电脑如果不是很老,它就没有开启的必要了。
atd:和anacron类似,与定时执行计划任务类似。
bluez-utiles:蓝牙服务,没有的话可以关了。
bootlogd:似乎使用来写log的,安全期间开着他也许比较好。
cron:指定时间运行程序的服务,所以开着比较好的。
cupsys:打印机服务,所以如果就开启吧。
dbus:消息总线系统,非常重要,一定要开。
dns-clean:拨号连接用的。
evms:企业卷管理系统。
fetchmail:用于邮件守护。
gdm:gnome桌面管理器。
halt:关机用的,不要更改。
hdparm:没有ide硬盘也就不用开启它。
hotkey-setup:这个是给某些品牌笔记本设计的热键映射,台式机用户请关了它。
hotplug:这个是用于热插拔的,在某些电脑上关闭它会使声卡无效,请在S级别开启它。
hplip:hp打印机专用的,应该可以关了它。
ifrename:网络接口重命名。
ifupdown:这个使用来打开网络的,开着它。
ifupdown-clean:同上。
klogd:linux守护程序,接受来自内核和发送信息到syslogd的记录,并记录为一个文件,所以请开着它。
linux-restricted-modules-common:这个使用来使用受限制的模块的,你可以从/lib/linux-restricted-modules下查看,如果没有什么,你可以关掉它。
lvm:逻辑卷管理器,如果没有用可以关了它。
makedev:用来创建设备到/dev/请不要动它。
mdamd:管理raid用,如果没有请关闭它。
module-init-tools 从/etc/modules:加在扩展模块的,这个一般开着。
networking:增加网络接口和配置dns用,将它开启。
ntp-server:与时间服务器进行同步的。
pcmcia:激活pcmica设备。
powernowd:用于管理cpu的客户端程序,如果有变频功能,比如amd的quite':cool 那么就开启它吧。
ppp:拨号用的。
ppp-dns:同上。
readahead:预加载服务,让我想起了win的预读,当然他们不同,它会使启动变慢3-4妙,可以关了它。
reboot:重启用的,不要动。
rmnologin:如果发现nologin,就去除它,在笔记本上不用开启。
rsync:rsync协议守护,请视情况而定。
screen-cleanup:一个清除开机屏幕的脚本,随便。
sendsigs:重启和关机时向所有进程发送消息。
single:激活但用户模式。
stop-bootlogd:从2,3,4,5级别停止bootlogd。
sudo:这个不用说吧。
sysklogd:用于记录系统日志信息。
udev:用户空间dev文件系统。
udev-mab:同上。
umountfs:用来卸载文件卷的。
urandom:生成随机数的。
usplash:那个漂亮的启动画面,但是关了它,它也存在,所以想关他需要把内核起动参数中的splash一句删掉。
vbesave:显卡bios配置工具。
xorg-common:设置x服务ice socket。
作者:Joan
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。