一、Linux最小化安装后默认开机启动服务

二、每个进程服务的用途

三、注册服务脚本

四、chkconfig命令

五、服务脚本重要行

1. Linux最小化安装后默认开机启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost ~]# ls -al /etc/init.d/
total 144
drwxr-xr-x. 2 root root 4096 Feb 6 18:02 .
drwxr-xr-x. 10 root root 4096 Feb 6 18:01 ..
-rwxr-xr-x. 1 root root 3378 Jun 22 2012 auditd
-r-xr-xr-x. 1 root root 1340 Feb 22 2013 blk-availability
-rwxr-xr-x. 1 root root 2793 Jul 19 2011 crond
-rw-r--r--. 1 root root 18216 Jan 9 2013 functions
-rwxr-xr-x. 1 root root 5829 Jan 9 2013 halt
-rwxr-xr-x. 1 root root 9515 Feb 22 2013 ip6tables
-rwxr-xr-x. 1 root root 9409 Feb 22 2013 iptables
-rwxr-xr-x. 1 root root 652 Jan 9 2013 killall
-r-xr-xr-x. 1 root root 2134 Feb 22 2013 lvm2-lvmetad
-r-xr-xr-x. 1 root root 2665 Feb 22 2013 lvm2-monitor
-rwxr-xr-x. 1 root root 2989 Jan 9 2013 netconsole
-rwxr-xr-x. 1 root root 5486 Jan 9 2013 netfs
-rwxr-xr-x. 1 root root 6334 Jan 9 2013 network
-rwxr-xr-x. 1 root root 3852 Dec 3 2011 postfix
-rwxr-xr-x. 1 root root 1559 May 20 2009 rdisc
-rwxr-xr-x. 1 root root 1822 Feb 22 2013 restorecond
-rwxr-xr-x. 1 root root 2011 Jan 10 2013 rsyslog
-rwxr-xr-x. 1 root root 1698 Feb 22 2013 sandbox
-rwxr-xr-x. 1 root root 2056 Nov 20 2012 saslauthd
-rwxr-xr-x. 1 root root 647 Jan 9 2013 single
-rwxr-xr-x. 1 root root 4534 Feb 22 2013 sshd
-rwxr-xr-x. 1 root root 2294 Feb 22 2013 udev-post
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost init.d]# chkconfig \--list
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off

2. 每个进程服务的用途

auditd

auditd(或auditd守护进程)是Linux审计系统中用户空间的一个组件,其负责将审计记录写入磁盘。默认开启

blk-availability

lvm2相关,如果用lvm,建议开启

LVM是Logical Volume Manager(逻辑卷管理器)的简写,又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器。是Linux核心所提供的逻辑卷管理(Logical Volume Management)功能。它在硬盘的硬盘分区之上,又创建了一个逻辑层以方便系统管理硬盘分区系统。
逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的卷组(VG),而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。

crond

计划任务管理,默认开启

functions

functions这个脚本是给/etc/init.d里边的文件使用的,提供了一些基础的功能。首先会设置umask,path,还有语言环境,然后会设置success,failure,warning,normal集中情况下的字体颜色。

还有其他一些重要方法:

checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录)

daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个

killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个

pidfileofproc:寻找某个进程的pid

pidofproc:类似上面的,只是还查找了pidof命令

status:返回一个服务的状态

echo_success,echo_failure,echo_passed,echo_warning分别输出各类信息

success,failure,passed,warning分别记录日志并调用相应的方法

action:打印某个信息并执行给定的命令,它会根据命令执行的结果来调用 success,failure方法

strstr:判断$1是否含有$2

confirm:显示 “Start service $1 (Y)es/(N)o/(C)ontinue? [Y]”的提示信息,并返回选择结果

halt

当进入运行级别为0(halt)或者运行级别为6(reboot)时,这个文件被执行用来初始化。它将杀掉所有进程,卸载文件系统,然后停止或重启。

ip6tables

ipv6防火墙,默认开启。用到ipv6网络的就用,一般关闭。

iptables

ipv4防火墙,默认开启

killall

该脚本用于把所有正在运行的,且不需要的服务都停掉。

lvm2-lvmetad

这个文件是LVM2的的一部分。它通常是用来处理使用lvcreate -m 参数创建导致的LVM2镜像设备的失败。

lvm2-monitor

lvm监视,如果使用LVM逻辑卷管理就开启。默认开启

netconsole

Netconsole用于将本地主机的日志信息打印到远程主机上,便于远程用户查看日志信息。默认开启

netfs

netfs该服务用于在系统启动时自动挂载网络中的共享文件空间,比如NFS,Samba等等。如果你连接到局域网中的其它服务器并进行文件共享,就开启它。大多数台式机和笔记本用户应该关闭它。

默认开启

network

系统启动时激活所有网络接口。网络基础服务,是必需的。默认开启

postfix

替代sendmail的邮件服务,默认开启。如果无邮件服务,可关闭。

rdisc

自动检测路由器,默认关闭

1
2
[root@localhost init.d]# service rdisc status
rdisc is stopped

restorecond

selinux相关,如果开启了selinux,就需开启。默认关闭

1
2
[root@localhost init.d]# service restorecond status
restorecond is stopped

rsyslog

提供系统的登录档案记录。默认开启,系统日志关键服务,必需。

sandbox

建立/挂载点共享,/var/tmp,/tmp,/home/sandbox 不共享。默认关闭

saslauthd

sasl认证守护进程。默认关闭

single

当进入runlevel 1时,这个文件被初始化执行,进入超级管理状态。它会杀死所有守护进程,系统进入单用户模式。注意这时文件系统保持挂载。

sshd

ssh服务端,可提供安全的shell登录。默认开启,ssh远程登录服务,必需。

udev-post

设备管理系统。默认开启

3. 注册服务脚本

1) /etc/init.d/目录下的脚本名称就是服务注册时使用的服务。

2) 服务脚本操作命令

start :启动服务

stop :停止服务

status :查看服务状态

condrestart :类似restart,但是只有在服务存在时才会执行重启

restart :重启服务,在服务进程不存在时直接启动服务

reload :不进行重启,对服务的配置文件重新读取加载

3) 标准服务注册脚本模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79 #此处必须有,是chkconfig服务注册到linux启动级别的配置
# description: Start and stop Keepalived
# Source function library
. /etc/rc.d/init.d/functions #加载脚本使用到的函数例如status、killproc
# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived #服务的配置文件
RETVAL=0 #状态码

prog="keepalived" #服务的进程文件名,进程号文件名keepalived.pid
start() {
echo -n $Stopping $prog: "
killproc keepalived #默认到/var/lock/subsys/、/var/run目录下查找对应的文件和pid 然后kill
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog #删除进程锁定文件
}
stop() {
echo -n $"Stopping $prog: "
killproc keepalived #默认到/var/lock/subsys/、/var/run目录下查找对应的文件和pid 然后kill
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog #删除进程锁定文件
}

reload() {
echo -n $"Reloading $prog: "
killproc keepalived -1 #查找配置文件并重新加载
RETVAL=$?
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
status)
status keepalived
;;
*)
echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
exit 1
esac

exit $RETVAL

service命令是系统自动到/etc/init.d目录下根据传递的服务名查找到对应的文件,然后文件执行传递操作命令(start、stop)。服务脚本是根据服务的启动脚本、查看进程来进行启动服务和查看服务状态,以及执行kill命令来停服务。

标准的服务在启动时会把启动后的进程号记录到/var/run的目录下,在/var/subsys/目录下锁定服务。因此可以根据keepalived的脚本来写注册服务。当服务进程号文件目录是非标准的,此时按照keepalived的脚本写命令会报错,需要根据服务的具体配置来写脚本找到进程号进行停,或执行服务的启动脚本执行start。

4. chkconfig命令

增加一个服务:

1)服务脚本必须存放在/etc/ini.d/目录下;

2)chkconfig --add servicename

1
2
3
# chkconfig: 2345 21 79 
服务脚本中必须写如上一行,第一列数字2345用来说明此服务的运行级别,第二列数字用来设置服务启动顺序,第三列数字用来设置服务关闭顺序。
在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;S21servicename,K79servicename。

auditd实例如下:

1
2
3
4
5
6
[root@localhost init.d]# cat auditd 
#!/bin/bash
#
# auditd This starts and stops auditd
#
# chkconfig: 2345 11 88
1
2
3
4
5
6
7
8
[root@localhost init.d]# ls -al /etc/rc.d/rc2.d/S11auditd 
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc2.d/S11auditd -> ../init.d/auditd
[root@localhost init.d]# ls -al /etc/rc.d/rc3.d/S11auditd
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc3.d/S11auditd -> ../init.d/auditd
[root@localhost init.d]# ls -al /etc/rc.d/rc4.d/S11auditd
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc4.d/S11auditd -> ../init.d/auditd
[root@localhost init.d]# ls -al /etc/rc.d/rc5.d/S11auditd
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc5.d/S11auditd -> ../init.d/auditd
1
2
3
4
[root@localhost init.d]# ls -al /etc/rc.d/rc1.d/K88auditd 
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc1.d/K88auditd -> ../init.d/auditd
[root@localhost init.d]# ls -al /etc/rc.d/rc6.d/K88auditd
lrwxrwxrwx. 1 root root 16 Feb 6 18:02 /etc/rc.d/rc6.d/K88auditd -> ../init.d/auditd

3)chkconfig --level 345 mysqld on

chkconfig --list #列出所有的系统服务

chkconfig --del httpd #删除httpd服务

chkconfig --list mysqld #列出mysqld服务设置情况

chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,–level 35表示操作只在等级3和5执行,on表示启动,off表示关闭

chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

5. 服务脚本重要行

1
2
3
4
5
6
1.# chkconfig: 2345 55 25
2.# description: SSH is a protocol for secure remote shell access.
# This service starts up the OpenSSH server daemon.

3.# Default-Start: 2 3 4 5
4.# Default-Stop: 0 1 6

第一行与第3行、第4行是与的关系,无论存在哪一行chkconfig命令都可以添加服务;第二行的描述不是必须的。

第四行默认停止的优先级大于第一行和第三行的开启优先级。

例子一:
将第1、3、4行全部删除,执行命令

1
2
[root@localhost ~]# chkconfig --add mysqld
service mysqld does not support chkconfig

例子二:
删除第1、3行全部删除,剩下

1
# Default-Stop: 0 1 6

执行命令

1
2
3
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig --list|grep mysqld
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

关闭了1、2、3、4、5、6

例子三:
删除第1行,修改第3行和第4行为:

1
2
# Default-Start: 0 3 4 5
# Default-Stop: 0 3 1 6

1
2
3
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig --list|grep mysqld
mysqld 0:off 1:off 2:off 3:off 4:on 5:on 6:off

说明:
因为开启设置为0、3、4、5,而关闭优先级大于开启,关闭设置了关闭0、1、3、6,所以最后剩下了4、5。

/var/lock/subsys/标准服务启动后的会生成进程锁定文件在该目录中,该文件是针对服务service而言的,判断进程服务的唯一性,防止起多个进程。

/var/run/标准服务启动后的生成进程pid文件在该目录中,该文件是针对当前进程本身而言的,判断进程启动的唯一性,避免资源的互相竞争。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
服务文件放在哪里?什么时候启动?
/sbin/init
/etc/inittab
/etc/rc.d/rc.sysinit
/etc/rc.d/rc
/etc/rc.d/rcN.d
/etc/init.d/* 服务文件放在这里
/etc/rc.d/rc.local
/sbin/mingetty
/bin/login
/bin/bash
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc