目录
RHEL 6 和 RHEL 7 及之后 创建系统服务脚本区别
linx运行级别
1、linux运行有七个级别
运行级别 | 描述 |
---|---|
0 | 停机状态系统默认运行级别不能设置为0,否则系统不能正常启动。init 0 命令可关闭系统。 |
1 | 单用户状态仅root用户可登录,用于系统维护,禁止远程登录。相当于Windows下的安全模式。 |
2 | 多用户状态(无NFS)没有网络服务。 |
3 | 完整的多用户状态(有NFS)有网络服务,登录后进入控制台命令行模式。 |
4 | 系统未使用保留一般不用,特殊情况可做特殊设置,<br>如笔记本电池耗尽时进行应急设置。 |
5 | 图形化模式登录后进入图形GUI模式,如GNOME、KDE或X Window系统。 |
6 | 重启系统正常关闭并重启<br>默认运行级别不能设为6,否则会导致持续重启。 |
在 /etc/rc.d 下有 7 个名为 rcN.d 的目录,对应系统的 7 个运行级别。
[root@uplooking ~] ls /etc/rc.d | grep 'rc[0-9].d'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcN.d 目录下都是一些符号链接文件,这些链接文件都指向 init.d 目录下的 service 脚本文件,命名规则为 “K+nn+服务名或S+nn+服务名”,其中 nn 为两位数字。
2、Rhel7默认使用xfs文件系统,rhel6默认为ext4文件系统,但从rhel6.8起开始支持xfs系统。
版本 | 默认文件系统 | XFS 支持 |
---|---|---|
RHEL 6 | ext4 | 从 RHEL 6.8 起支持 |
RHEL 7 | XFS | 默认使用 |
以上信息总结了Red Hat Enterprise Linux (RHEL)不同版本中默认文件系统的变更以及对XFS文件系统支持的情况:
-
RHEL 6:初始默认使用
ext4
文件系统,这是一种广泛使用的日志文件系统,以其可靠性、性能和功能丰富著称。然而,随着版本迭代,从RHEL 6.8开始,系统也开始支持XFS
文件系统,为用户提供了一个新的选择,特别是对于需要处理大文件和大容量存储的场景。 -
RHEL 7:标志着一个显著的转变,它默认使用了
XFS
文件系统。XFS
以其出色的扩展性、高性能的文件操作(特别是大文件和高吞吐量操作)和对大容量存储的支持而闻名。这一改变反映了企业级Linux系统对高性能存储需求的增长响应。
3、设置默认启动级别
Rhel6:vim /etc/inittab 将末行的id:3:initdefault中的3改为相应数字即可
Rhel7:rhel7采用了targets来定义运行级别,设置默认启动级别命令为systemctl set-default x.target ,重启后即可生效
查看:[root@node1 ~] systemctl get-default
multi-user.target
设置:systemctl set-default graphical.target 图形界面
4、RHEL6 服务脚本
#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15 -- 指定在那个运行级别启动或关闭脚本,数字代表顺序
- 代表2345运行级别,也可以指定35
85 代表启动顺序 S85httpd
15 代表关闭顺序 K15httpd
# description: The Apache HTTP Server is an efficient and extensible \
# server implementing the current HTTP standards.
脚本功能说明
脚本增加执行权限:chmod +x /etc/init.d/httpd
添加成系统服务脚本:chkconfig --add httpd
设置开机自启动:chkconfig --level 35 httpd on
在RHEL 6或类似使用SysVinit系统的Linux发行版中,chkconfig
是一个用于管理服务在不同运行级别下自动启动或关闭的服务管理工具。当在服务脚本中看到这样的注释行:
当你运行命令 ls /etc/rc.d/rc3.d/
时,你实际上是在查看与运行级别3相关的系统服务启动链接目录的内容。运行级别3对应于多用户、无图形界面(文本模式)的系统状态。在传统的SysVinit系统中(如早期的Red Hat Enterprise Linux 6及之前版本),这个目录通常包含了一系列符号链接,这些链接指向了 /etc/init.d/
目录下的服务初始化脚本,用于控制服务的启动和停止。
这些链接文件的命名遵循 Sxxservice_name
或 Kxxservice_name
的格式,其中:
S
表示启动(Start),K
表示停止(Kill)。xx
是两位数字,表示执行的优先级。数字越小,服务启动或停止的优先级越高。service_name
是服务的名称。
例如,输出可能看起来像这样:
S01syslog
S02network
S10mysql
S20crond
...
K01syslog
K02network
K10mysql
K20crond
这表示在运行级别3下,syslog
服务会首先启动(S01syslog),然后是网络配置(S02network),依此类推。相反,在系统关闭或切换运行级别时,服务会按照相反的顺序停止,即先停止crond
服务(K20crond),然后是mysql
服务(K10mysql)。
请注意,从RHEL 7开始,系统使用systemd
作为初始化系统,使用targets
代替了传统的运行级别概念,目录结构和管理服务的方式也有所不同。在这种情况下,你将不再直接查看/etc/rc.d/rc?.d/
目录,而是使用systemctl
命令来管理服务和查看系统状态。
chkconfig: - 85 15
这意味着对该服务(此处以httpd
为例)的启动和关闭行为进行了配置。注释中的各个部分解释如下:
- 第一个字段(空位,用
-
表示):这通常表示该服务在哪些运行级别下不执行任何操作。如果需要指定特定的运行级别来启动或关闭服务,这里会列出相应的运行级别。但这里的-
意味着默认适用于所有定义的运行级别(除非在/etc/rc.d/rcN.d/
中有特别排除)。- 第二个字段(85):代表启动优先级。在运行级别改变到需要启动服务时(如从运行级别3进入多用户模式),系统会按照优先级从小到大的顺序启动服务。数值
85
意味着httpd
服务将在优先级较低的服务启动之后启动。- 第三个字段(15):代表关闭优先级。当系统关闭或切换到另一个运行级别时,系统会按照优先级从大到小的顺序停止服务。数值
15
意味着httpd
服务会在需要停止服务时较早被关闭。
基于上述配置,一个简化版的httpd
服务脚本开头可能如下所示:
#!/bin/bash
#
# httpd - Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is a powerful, efficient, and extensible web server.
#
# 实际的启动、停止、重启等操作函数定义...
为了管理httpd
服务,你可能会执行以下命令:
-
添加服务到
chkconfig
管理列表:chkconfig --add httpd
-
设置服务在指定运行级别自动启动(例如,级别3和5):
chkconfig --level 35 httpd on
-
查看服务当前的启动设置:
chkconfig --list httpd
通过这些步骤,可以控制系统在不同运行级别下httpd
服务的行为,确保它按照预期启动和关闭。
示例:httpd
[root@localhost init.d]# chkconfig --add httpd --添加服务到chkconfig管理列表
[root@localhost init.d]# chkconfig --list httpd --查看httpd运行级别
httpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@localhost init.d]# ls /etc/rc.d/rc3.d/
[root@localhost init.d]# chkconfig --level 35 httpd on
[root@localhost init.d]# chkconfig --list httpd
httpd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
RHEL 6 和 RHEL 7 及之后 创建系统服务脚本区别
在Red Hat Enterprise Linux (RHEL) 6和RHEL 7中,创建系统服务的方法存在显著差异,主要源于RHEL 7引入了Systemd作为新的初始化系统和服务管理器,取代了原来的SysV init系统。下面是两者创建服务脚本的主要区别:
RHEL 6 (使用SysV init系统)
在RHEL 6中,服务脚本通常是位于/etc/init.d/
目录下,并以服务名命名,例如/etc/init.d/httpd
。这些脚本是shell脚本,通常包含start、stop、restart、status等函数来控制服务的启动、停止、重启和查看状态。为了使服务能够在系统启动时自动运行,还需要链接到适当的运行级别目录(如/etc/rc.d/rc3.d/
、/etc/rc5.d/
)。
创建服务的步骤通常包括:
- 在
/etc/init.d/
目录下创建服务脚本。 - 脚本中实现start、stop、restart、status等基本功能。
- 使用
chkconfig
命令设置服务开机启动等级(如chkconfig httpd on
)。 - 使用
service
命令管理服务(如service httpd start
)。
RHEL 7 (使用Systemd)
RHEL 7及以后版本使用Systemd,服务单元文件为.service
类型,通常存放在/usr/lib/systemd/system/
或/etc/systemd/system/
目录下,文件名为服务名.service
,如httpd.service
。
服务单元文件是一个INI格式的配置文件,包含[Unit]、[Service]、[Install]等节,定义了服务的描述、如何启动服务、依赖关系、重启行为等。
创建服务的步骤包括:
- 创建服务单元文件,如在
/etc/systemd/system/
下创建httpd.service
。 - 编辑该文件,至少包含基本的[Unit]、[Service]、[Install]节,定义描述、执行命令、启动类型(如ExecStart=/usr/sbin/httpd)、期望状态等。
- 使用
systemctl
命令管理服务:systemctl start httpd.service
启动服务,systemctl enable httpd.service
设置服务开机启动。 - 查看服务状态使用
systemctl status httpd.service
实例(使用复制文件方式启动服务)
在Rocky Linux 9.4 来完成操作(使用SysV init系统)---也就是RHEL6的方法
控制Apache服务器的启动、停止、重启、重载入配置等操作
例如:service httpd start
首先已经使用源码安装在Rocky Linux 9.4上安装过了参考(RHEL7 系统服务脚本)文章
[root@localhost bin] ll /usr/local/ | grep httpd
drwxr-xr-x. 14 root root 164 5月 22 19:07 httpd
[root@localhost ~] cd /usr/local/httpd/bin/
[root@localhost bin] ll /usr/local/httpd/
总用量 40
drwxr-xr-x. 2 root root 4096 5月 23 15:27 bin
drwxr-xr-x. 2 root root 167 5月 22 19:07 build
drwxr-xr-x. 2 root root 78 5月 22 19:06 cgi-bin
drwxr-xr-x. 4 root root 84 5月 23 15:27 conf
drwxr-xr-x. 3 root root 4096 5月 22 19:06 error
drwxr-xr-x. 2 root root 24 5月 22 18:32 htdocs
drwxr-xr-x. 3 root root 8192 5月 22 19:06 icons
drwxr-xr-x. 2 root root 4096 5月 22 19:07 include
drwxr-xr-x. 2 root root 6 5月 22 19:06 logs
drwxr-xr-x. 4 root root 30 5月 22 19:07 man
drwxr-xr-x. 14 root root 8192 5月 22 18:32 manual
drwxr-xr-x. 2 root root 4096 5月 22 19:06 modules
bin
: 通常包含Apache服务器的可执行文件,如httpd
二进制文件。build
: 可能是编译或构建过程中的临时目录,具体依安装过程而定。cgi-bin
: 存放CGI脚本的目录,用于执行服务器端脚本处理网页动态内容。conf
: 配置文件目录,包含最重要的Apache配置文件httpd.conf
等。error
: 错误文档存放目录,存放自定义的HTTP错误页面。htdocs
: 默认的网页根目录,存放网站的静态文件,如HTML、图片等。icons
: 存放Web图标资源的目录。include
: 包含Apache配置中的包含文件,如模块加载配置等。logs
: 存放服务器日志文件,如访问日志access_log
和错误日志error_log
。man
: 手册页目录,存放Apache的手册页文件。manual
或manual
: 可能是Apache的文档或手册目录,也可能与上面的man
目录重复,具体依安装配置而异。
[root@localhost ~] cd /usr/local/httpd/bin/
[root@localhost bin]# ll
总用量 2940
-rwxr-xr-x. 1 root root 112800 5月 22 19:06 ab
-rwxr-xr-x. 1 root root 3431 5月 22 19:04 apachectl
-rwxr-xr-x. 1 root root 23875 5月 22 19:04 apxs
-rwxr-xr-x. 1 root root 29744 5月 22 19:06 checkgid
-rwxr-xr-x. 1 root root 8925 5月 22 19:04 dbmmanage
-rw-r--r--. 1 root root 1069 5月 22 19:04 envvars
-rw-r--r--. 1 root root 1069 5月 22 19:04 envvars-std
-rwxr-xr-x. 1 root root 38640 5月 22 19:06 fcgistarter
-rwxr-xr-x. 1 root root 92176 5月 22 19:06 htcacheclean
-rwxr-xr-x. 1 root root 65160 5月 22 19:06 htdbm
-rwxr-xr-x. 1 root root 38608 5月 22 19:06 htdigest
-rwxr-xr-x. 1 root root 64784 5月 22 19:06 htpasswd
-rwxr-xr-x. 1 root root 2359864 5月 22 19:06 httpd
-rwxr-xr-x. 1 root root 36040 5月 22 19:06 httxt2dbm
-rwxr-xr-x. 1 root root 39352 5月 22 19:06 logresolve
-rwxr-xr-x. 1 root root 64912 5月 22 19:06 rotatelogs
ab
: Apache Benchmarking tool,用于测试HTTP服务器的性能,可以模拟多个并发请求来评估服务器的负载能力。apachectl
: Apache HTTP Server control script,用于控制Apache服务器的启动、停止、重启、重载入配置等操作。apxs
: Apache eXtenSion tool,用于构建、安装Apache模块的工具,支持从源代码创建、安装自定义模块。checkgid
: 检查gid权限的脚本或工具,可能是用于辅助Apache配置中的权限管理。dbmmanage
: 管理dbm文件的工具,dbm是数据库文件格式,常用于存储用户认证信息。envvars
和envvars-std
: 环境变量设置脚本,通常用于设置Apache运行所需的环境变量,如PATH。fcgistarter
: FastCGI starter工具,可能用于管理FastCGI进程。htcacheclean
: 用于清理Apache缓存的工具,帮助管理磁盘空间。htdbm
,htdigest
,htpasswd
,httxt2dbm
: 分别用于管理用户认证的工具,包括生成密码文件、转换文本到dbm格式等。httpd
: Apache HTTP Server主程序,是Apache Web服务器的核心可执行文件。logresolve
: 解析日志文件中的IP地址为域名的工具,通常用于分析日志时增强可读性。rotatelogs
: 日志文件轮转工具,用于自动管理和维护日志文件,如按时间或大小分割日志文件。
[root@localhost bin] mkdir -p /etc/init.d/
[root@localhost bin] cp apachectl /etc/init.d/httpd
[root@localhost bin] ll /etc/init.d/
总用量 4
-rwxr-xr-x. 1 root root 3431 5月 23 21:00 httpd
接下来使用绝对路径去启动他--下面只是一串警告(主配置文件里的 ServerName 没有定义)
[root@localhost init.d] /etc/init.d/httpd start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
不过端口已经启动了,证明服务已经启动了,这一个警告并不影响
[root@localhost init.d] vim /usr/local/httpd/conf/httpd.conf
[root@localhost init.d] /etc/init.d/httpd stop
[root@localhost init.d] /etc/init.d/httpd start
[root@localhost init.d] netstat -tunlpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 3448/httpd
udp 0 0 0.0.0.0:58096 0.0.0.0:* 843/avahi-daemon: r
在浏览器打开发现已经成功