「Linux奏章14」服务管理(daemon)

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。

服务 (service) 本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,比如 (mysql、sshd、防火墙等),因此又称为守护进程 (daemon).

1. service

service 管理指令:

  • service <服务名> [start | stop | restart | reload | status]
  • service 指令管理的服务在 /etc/init.d 中查看
    • img
  • 🔥 在 CentOS 7.0 以后很多服务不再使用 service,而是 systemctl 指令。
  • 常用:service network statusservice network startservice network stop
  • 修改系统自启动服务
    • 输入指令: setup ==> 选择 System services
      img
    • 修改自启动服务 ( 按下Space 修改 ):
      img

2. runlevel

  • 重申服务的运行级别(runlevel)
    • 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    • 1:单用户工作状态,root权限,用于权限维护,禁止远程登录
    • 2:多用户状态(无NFS),不支持网络
    • 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    • 4:系统未使用,保留
    • 5:X11控制台,登陆后进入图形GUI界面
    • 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动(循环开关机)
  • ⭐开机流程:开机 => BIOS => /boot => systemd (pid=1) => 运行级别 => 运行级别对应的服务
  • ⭐修改和查看默认运行级别
    • systemctl get-default
    • systemctl set-default multi-user.target
    • systemctl set-default graphical.target

3. chkconfig

chkconfig 指令

  • 通过 chkconfig 命令可以给服务的各个运行级别设置自启动/自关闭(某个服务对于各个运行级别不一定一样,是独立的
  • chkconfig 基本语法
    • chkconfig --list [| grep xxx] : 查看服务
    • chkconfig <服务名> --list
    • chkconfig --level 5 <服务名> on/off : 启停服务(对于某个运行级别)
  • 案例演示:对 network 服务在 3 运行级别开启自启动
    • chkconfig --level 3 network on
    • 注意 : chkconfig 重新设置服务的自启动/自关闭,需要 reboot 才能生效
    • img

4. systemctl

🔥 systemctl 指令详解

  • 使用 netstat -anp 可以监控网络状态
    • img
  • CentOS 7 以后运行级别简化为 3 和 5,所以 systemctl 不再区分运行级别,执行同时会设置 3 和 5 的运行级别
  • ⭐基本语法 : systemctl [start|stop|enable|disable|is-enabled|restart|status] <服务名>
  • systemctl 指令管理的服务在 /usr/lib/systemd/system 查看(service 指令管理的服务在 /etc/init.d 中)
    • ll /usr/lib/systemd/system
    • img
  • systemctl 设置服务自启动状态【常用命令】
    • systemctl list-unit-files [| grep <服务名>] : 查看服务
    • systemctl enable <服务名> : 设置服务开机启动
    • systemctl disable <服务名> : 关闭服务开机启动
    • systemctl is-enabled <服务名> : 查询某个服务是否自启动
  • systemctl 设置当前(临时)服务状态——并不影响自启动状态
    • systemctl status <服务名> : 查看当前服务状态
    • systemctl stop <服务名> : 关闭当前服务(临时,与自启动无关)
    • systemctl start <服务名> : 开启当前服务(临时,与自启动无关)
    • ...
  • systemctl list-unit-files
  • systemctl status

5. firewall-cmd

  • 查看当前防火墙状态等一系列操作:systemctl status firewalld
    img
  • 注意
    • stop|start 这种操作是立即生效的,当重启系统后,还是回归以前对服务的自启动设置(不同于自启动)telnet 测试某个端口即可验证】
    • 如果希望某个服务自启动或者自关闭并永久生效,使用 systemctl [enable|disable] <服务名>
  • 防火墙 firewall & 打开或关闭指定端口
    • 在真正的生产环境,往往需要将防火墙打开,但问题是:如果将防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,就需要打开指定的端口,比如 80、22、8080...
      如下介绍如何实现:
    • 查询端口是否开放 : firewall-cmd --query-port=端口号/协议
    • 打开端口 : firewall-cmd --permanent --add-port=端口号/协议
    • 关闭端口 : firewall-cmd --permanent --remove-port=端口号/协议
    • ⭐无论打开/关闭,只有重新载入才能生效 : firewall-cmd --reload
    • 查看当前网络状态(可以用来查端口号对应的协议) : netstat -anp | more
  • 应用实例
    • ① 启用防火墙
      img
    • ② 开放111端口
      img
    • ③ 测试111端口是否能 telnet
      物理机 telnet 192.168.10.131 111
    • ④ 再次关闭111端口
      img

希望本文对你有所帮助🧠
欢迎在评论区留下你的看法🌊,我们一起讨论与分享🔥