在Linux系统中,有一些特殊程序,启动后就会持续在后台执行,等待用户或者其他软件调用使用,这种程序我们成为服务。
Linux系统中服务的管理工具
- systemV
- systemd
一、systemV于init
systemV当中有一个程序叫init,这个程序可以让系统中的service命令去调用/etc/rc.d/init.d/目录下的服务脚本,我们可以通过service命令去控制服务的启动与关闭,或者找到服务相应的执行文件,然后执行,比如/usr/sbin/httpd,这样才能启动一个服务。
该服务管理方式在RHEL7之前的系统中默认。
init的特点
- 启动/停止/查看
/etc/rc.d/init.d/servername start/stop/restart/status
或
service servicename start/stop/restart/status
- 开机启动管理与查看
chkconfig --level 0-6 servername on/off 指定一个服务在那个运行级别启动
chkconfig --list servernamer 查看一个服务在哪个运行级别启动
- setup图形化工具查看服务
setup是RedHat私有化的命令工具,别的系统不一定支持
方式1:使用setup 系统服务就可以看到全部自启动的服务
选择系统服务查看全部service
用方向键选择服务名称,空格键选定服务是否设置为自启动。tab键切换到下面“确定|退出”
二、systemd与unit
从CentOS7开始systemV,被效率更高的systemd所替代,对应命令systemctl ,并且systemctl也兼容了service (service命令作为systemd的入口,也是systemctl命令的封装)。
system的优势
- 并行处理所有服务,缩短开机时间
- 响应速度快,通过systemctl命令就可以完成所有操作
- 自动解决服务的依赖关系,类似yum
- 方便记忆,安装类型对服务进行分类
- 兼容init
相关文件
/usr/lib/systemd/system/ 服务的启动脚本,包含所有安装完成的服务设置文件
/run/system/system/ 系统运行过程中的服务脚本优先级高于上一个文件
/etc/systemd/system/ 管理员手动建立的服务启动脚本,优先级最高
服务类型
[root@localhost131 ~]# systemctl -t help Available unit types: service //服务单元,用于控制服务 socket //接口单元,进程间通信 busname target //目标单元,控制一组其它单元 snapshot device //设备单元,控制动态的设备 mount //挂载单元,管理文件系统挂载点 automount //自动挂载单元,管理文件系统自动挂载点 swap //交换分区单元,用于管理swap设备或文件 timer //定时器单元,管理基于时间触发的动作 path //路径单元,监听文件系统路径,以用于基于路径的启动 slice //范围单元,管理与控制一组特定进程的资源占用 scope //范围单元,与service类似,系统自动创建
⚪systemctl 管理命令
- 基本语法:systemctl [start|stop|restart|status] 服务名 (临时生效,重启后恢复原来状态)
- 在systemd中,所有服务类型都被称为unit,主要分成6类:.service, .socket, .target, .path, snapshothot, .timer,它们都存放在/usr/lib/systemd/system/目录中
⚪systemctl设置服务的自启动状态
- systemctl list-unit-files [ |grep 服务名] (查看服务开机启动状态)
- systemctl enable 服务名(设置开机自启)
- systemctl disable 服务名 (关闭服务开机自启动,CentOS7之后,不在使用chkconfig命令对各个运行级别的服务启动|关闭了,systemd默认对应的就是3和5两个级别)
- systemctl is-enabled 服务名 (查询某个服务是否开机自启动)
- systemctl list-units --type=service -all 列出所有service服务单元运行状态
- systemctl list-unit-files 查询所有已经安装的unit单元,是否设置开机启动。
⚪应用案例
1.systemctl list-unit-fiels 查看所有安装的unit,是否设置开机启动
[root@localhost131 ~]# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-fs-nfsd.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled var-lib-nfs-rpc_pipefs.mount static brandbot.path disabled cups.path enabled
ervice 的 disabled 和 enabled 状态都好理解,static 是个啥?在不存在的网站上一顿查找,找到如下这番解释:
"static" means "enabled because something else wants it". Think by analogy to pacman's package install reasons:
- enabled :: explicitly installed
- static :: installed as dependency
- disabled :: not installed
意思是,状态为 static 的服务,是作为别的服务的依赖而存在。
2.查看当前防火墙的状态,关闭防火墙或重启防火墙。==》firewalld.service
查看firewalld状态为active
[root@localhost131 ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 一 2021-08-02 07:38:35 CST; 2 days ago Docs: man:firewalld(1) Main PID: 7081 (firewalld) Tasks: 2 CGroup: /system.slice/firewalld.service └─7081 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 8月 02 07:38:34 localhost131 systemd[1]: Starting firewalld - dynamic firewall d..... 8月 02 07:38:35 localhost131 systemd[1]: Started firewalld - dynamic firewall daemon. Hint: Some lines were ellipsized, use -l to show in full.
systemctl stop|start firewalld 开启|关闭firewalld服务
这种方式只是临时生效,当重启系统后,还是回归到以前对服务的设置。
使用systemtcl enabl | disable firewalld(设置开机启动或关闭服务)