在操作系统中,“服务”指后台常驻的进程或守护程序。本文介绍常见服务如 ntpd、firewalld、ssh 等的管理,并讲解如何使用 systemctl 命令进行启动、停止、重启与开机自启的配置。
一、什么是系统服务管理
在操作系统中,“服务”指的是在后台长期运行、对系统或用户提供某种功能的进程或守护程序。例如:
- Windows 系统中的服务可通过 “services.msc” 可视化管理,包括 WiFi、蓝牙、音频、数据库等;
- Linux 系统同样提供大量服务,例如网络、时间同步、计划任务、数据库守护进程等,都可用命令行或工具进行管理。
Windows 服务举例
- WiFi 服务:依赖网卡硬件+网卡驱动+对应服务程序一起协作,让系统能够进行无线网络连接。
- MySQL:若在 Windows 安装了 MySQL 数据库,可以通过 Windows 服务控制面板启动/停止服务,也可在命令行通过
net start mysql/net stop mysql管理。
1 | # Win 下示例:通过 cmd 管理服务 |
Linux 则依赖一套统一的服务管理机制(如 Systemd),使用 systemctl 等命令行工具配置和管理这些服务,包括自动启动、重启、停止等操作。
二、Linux Systemd 服务管理
¶1.Systemd 基本作用
Systemd 是现代 Linux 发行版广泛使用的系统与服务管理器,它会在系统引导时启动各种服务,并维持它们的运行和状态。核心命令是 systemctl。
常见操作:
| 用法 | 说明 |
|---|---|
systemctl start name |
启动指定服务 |
systemctl stop name |
停止指定服务 |
systemctl restart name |
重启指定服务 |
systemctl status name |
查看指定服务状态 |
systemctl enable name |
开机自动启动 |
systemctl disable name |
取消开机自启 |
systemctl is-active name |
判断服务是否正在运行 |
systemctl is-enabled name |
判断是否设置为开机启动 |
示例:
1 | systemctl start crond |
¶2.systemctl 使用
CentOS 6 使用 service 来管理,CentOS 7 中的 service 和 chkconfig 都被整合到了 systemctl 里,向下兼容,可以使用旧的命令。
-
设置服务运行级别:
systemctl set-default multi-user.target/systemctl set-default graphical.target等控制是否进入文本多用户/图形环境。 -
查看日志:配合
journalctl -u servicename查看某服务相关日志。 -
编辑服务单元文件:在
/etc/systemd/system/或/usr/lib/systemd/system/下存放.service文件,自定义服务启动顺序、依赖等。 -
列出 active 运行中的服务:

1
2
3# 列出运行中的ssh服务
systemctl list-units --type service --all | grep ssh
# ssh.service loaded active running OpenBSD Secure Shell serverunit:单元、服务,指的是如sshd、network、nginx这样的服务名。
之前的service命令原理补充: Linux的大部分命令都是去机器上寻找到某个文件,然后读取文件的配置加载功能。而service默认是去 /etc/init.d 目录下寻找服务管理脚本文件,然后根据指令service start network等去进行启动。

找到 ssh 这个文件进行打开,往下翻会出现下面的内容,这些就包含了一些相关的指令:

所以如果安装了某个软件后没有方便的启停管理脚本,可以自己写完后放到
/etc/init.d目录下再调用就行。
通过 yum 或 apt 等安装的程序,会自动生成对应的管理脚本,自动的在 systemctl 管理脚本目录下:

于是我们每次要关停服务的时候就不需要先 ps -ef 再 kill pid 了,非常省事。以 nginx 为例我们可以有两种运行方式:
- 直接运行命令
- 以服务管理模式运行systemctl

可以查看 nginx 的服务管理脚本,以后安装软件可以参照这个脚本来写:

三、常见自有服务与用途
Linux 系统自带许多基础服务,以下列举几个常用且重要的示例:
¶1.时间服务
¶ntpd & ntpsec
ntpd 是用来实现时间同步的守护进程。它会定期与上游时间服务器通信,使本机系统时钟准确一致。ntpsec 是 ntpd 的现代化版本,旨在提高安全性、减少代码复杂度,并提供更高效的时间同步服务。它与传统的 ntpd 在核心功能上类似,但经过优化,移除了许多遗留特性,以提升稳定性和安全性。
为什么需要时间同步?
在分布式系统、集群、日志分析等应用场景下,时间同步至关重要。例如:
• 定时任务的执行(如 cron 任务)
• 日志对比和分析(确保日志时间戳的一致性)
• 数据同步(如数据库主从复制)
• 分布式计算和安全协议(如 Kerberos 身份认证)
如果服务器时间不一致,可能会导致:
• 任务调度混乱(任务可能提前或延后执行)
• 日志分析错误(难以关联不同系统的日志)
• 通信异常(如 TLS 证书时间不匹配)
因此保证服务器之前的时间一致非常重要。一些要点如下:
- NTP(Network Time Protocol)可实现毫秒级甚至更精确的时间同步,精度在局域网内可达 0.1 ms,在互联网上绝大多数地方的精度可以达到 1-50 ms。
- 在
/etc/ntp.conf或/etc/chrony.conf中配置上游时间服务器地址。 - 启动服务后,
ntpd会定时校准本机时间。
1 | systemctl enable ntpsec |

可以前往 /etc/ntpsec/ntp.conf 查看对应的配置文件:

以阿里云 ntp 服务器为例,要修改为这个服务器的时间可以:
1 | server times.aliyun.com iburst prefer |
可以查看 /usr/lib/systemd/system/ntpsec.service 查看配置文件:

查看运行状态:

ntpd -q 可以监视 ntpsec 运行状态:
1 | 2025-02-03T12:11:49 ntpd[973215]: INIT: ntpd ntpsec-1.2.2: Starting |
¶ntpdate(一次性时间同步工具)
如果仅需临时更新时间,也可用 ntpdate(或 chronyc)命令:
1 | ntpdate pool.ntp.org |
可以添加 -u 参数,指定来自某台服务器或者某个服务器厂商,例如:
1 | ntpdate -u ntp.aliyun.com |
ntpdata 它会一次性与指定服务器进行同步,而非常驻守护进程。 ntpd 在实际同步时间时是一点点校准过来的,最终把时间慢慢校对,但 ntpdate 不会考虑其他程序是否会阵痛,直接调整时间,区别是一个是校准,一个是调整。总结来说 ntpdate 有如下缺点:
- 暴力修改时间
ntpdate直接调整时间,可能导致依赖时序的程序(如定时任务、数据库同步)出错。ntpsec采用 平滑调整 方式,避免系统出现 时间跳变 影响应用。
- 安全隐患
ntpdate依赖外部 NTP 服务器,如果服务器被攻击,可能导致伪造时间同步。
推荐使用 ntpsec 进行长时间运行的同步,避免 ntpdate 直接修改系统时间带来的问题。
¶timedatectl (管理系统时间和 NTP 设置)
timedatectl 是一个命令行工具,用于在 Linux 系统上查看和配置系统时间和日期相关设置。它提供了一种简单且统一的方式来管理系统时间,可用于查看当前时间、时区设置,更改时间和日期,启用或禁用 NTP 同步等操作。timedatectl 主要是整合了两类指令:
-
date:改时间日期(软件时间,程序计算的时间)

-
hwlock:改硬件时间(计算机的主板上有一个 BIOS 的系统以及纽扣电池提供电量),可以同步硬件时间和软件时间,但现在 timedatectl 直接都做同步了。

也就是说我们可以选择自己搭建一个 ntpsec,也可以选择直接使用 timedatectl 自动运行一个 ntpsec。

我们可以做个实验,先把原来的 ntpsec 服务关掉,再开启 timedatectl 这边的服务:

发现出了问题,经过排查发现 timedatectl 是通过 systemd-timesyncd 管理 ntp 同步的,因此首先应该安装 systemd-timesyncd,然后开启它,再设置 timedatectl 里的 set-ntp:
1 | sudo apt install systemd-timesyncd -y |

当我们启动了 ntp 服务后,会发现无法再使用 timedatectl 设置时间了:

¶查看当前时间和日期信息
可以使用以下命令查看系统当前的时间、日期、时区以及 NTP 同步状态:
1 | timedatectl |
执行该命令后,会输出类似如下信息:

¶查看可用时区
要查看所有可用的时区列表,可以使用以下命令:
1 | timedatectl list-timezones |
这会列出所有支持的时区名称,例如 Asia/Shanghai、Europe/London 等。

要修改时区或者系统中查看有哪些时区文件也可以手动去做,这也是 CentOS 6 中一般使用的方法:

¶设置时区
若要更改系统的时区,可以使用以下命令,将时区名称替换为你需要的时区:
1 | timedatectl set-timezone Asia/Shanghai |
¶设置时间和日期
可以直接使用 timedatectl 设置系统的时间和日期,例如设置为 2025 年 2 月 3 日 13:00:00:
1 | timedatectl set-time "2025-02-03 13:00:00" |

¶启用或禁用 NTP 同步
如果要启用 NTP 同步,使用以下命令:
1 | timedatectl set-ntp true # 启用 |
ntpd 主要专注于通过 NTP 协议与时间服务器进行通信,实现系统时间的精确同步,是一个持续运行的守护进程,负责不断调整系统时间以保持与时间服务器一致。而 timedatectl 是一个管理系统时间设置的工具,它可以查看系统时间状态、更改时区、设置时间日期以及控制 NTP 同步的启用和禁用等操作。可以说 timedatectl 提供了一个用户操作界面,而 ntpd 则负责实际的时间同步工作,两者可以配合使用,例如使用 timedatectl 启用 NTP 同步后,ntpd 会按照配置进行时间同步操作。
¶2.firewalld (防火墙服务)
¶基本介绍
防火墙(Firewall)是一种网络安全工具(安全策略),用于控制和过滤网络流量,防止未经授权的访问,同时允许合法的数据通信。它就像一座智能大门,决定哪些数据包可以进入或离开计算机或服务器。

防火墙的主要作用包括:
- 拦截恶意流量:防止黑客攻击、病毒传播或未经许可的访问。
- 保护内部网络:阻止外部设备直接访问你的计算机或服务器的敏感端口,可以禁止来自特殊站点的访问。
- 流量管理:根据设定的规则(如 IP 地址、端口号)允许或阻止特定的数据通信,可以关闭不使用的端口,能够禁止特定端口的流出通信。
简单来说,防火墙就像保安,负责检查每个试图进入或离开你网络的“人”(数据包),并决定是放行、拦截还是询问管理员。防火墙分为硬件防火墙和软件防火墙:
- 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
- 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低
常见的防火墙服务有:
-
iptables(传统 Linux 防火墙),是有从前到后之分的
1
2iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # 接受22端口
iptables -A INPUT -p tcp -m tcp --dport 98 -j DROP # 拒绝98端口 -
firewalld(现代 Linux 动态防火墙),其实也是创建
iptables规则 -
ufw(Uncomplicated Firewall)(Ubuntu 友好型防火墙)
在 Linux 中,firewalld 是基于 iptables/netfilter 提供的一层动态防火墙管理,红帽系(RHEL/CentOS)常用,提供可实时加载规则,支持 zone、service、port 等管理方式。
¶firewalld 服务脚本
我们可以通过以下命令查看防火墙服务名以及查看服务脚本:
服务管理脚本其实就是帮我们执行软件提供的二进制命令,firewalld、nginx 和其他软件都是这样

¶启用与关闭
1 | systemctl start firewalld |
firewalld 默认使用运行模式,运行模式是配置的防火墙策略立即生效,但不写入配置文件,与之相对的是永久模式,此模式下配置的防火墙策略写入配置文件,但要 reload 才生效。
¶常用规则操作
¶添加/删除端口允许规则
1 | # 开放80端口 |
-
--permanent:写入永久规则,需要--reload生效。 -
若只想临时生效可不加
--permanent。 -
如果不加对应的协议会报错:
1
Error: INVALID_PORT: bad port (most likely missing protocol), correct syntax is portid[-portid]/protocol
举个例子,我们现在使用以下命令从89端口启动一个简单的HTTP服务(首先需要将虚拟机设置为桥接模式):
1 | python3 -m http.server 89 |
我们会发现输入这个网址并没有连接成功:http://0.0.0.0:89/

原因当然是我们在主机上要访问的是虚拟机的地址+端口号啦,但测试了虚拟机的地址后依然发现没有连接成功,我们回去看一下我们防火墙的规则,发现其实我们并没有开启89端口:

因此我们需要手动先开启端口再尝试连接:

大功告成:

接下来我们可以删除端口:
1 | firewall-cmd --remove-port=89/tcp |

现在又不能连接上了~
补充 tcp协议和 udp 协议:
- tcp 协议是一个安全可靠的连接,需要双向确认,客户端和服务端都需要确认对方连接上了才能通信。
- udp 协议是一个不可靠的连接协议,客户端可以随便给服务端发,不需要对方确认
比如在一个很差的网络环境下,网页无法访问,无法做 DNS 解析,但 QQ 可以收发消息。因为网络网站服务用的都是 TCP 协议,而 QQ 和 ntp 用的都是 UDP 协议。
¶添加/删除服务
1 | # 开放ntp服务(一般包含80端口规则) |

注意:我们有些服务其实是被包含在一些大模块下的,比如我们想要直接添加 nginx 服务是做不到的,但我们可以添加http服务,放行80端口即可:

如果 nginx 不是绑定在80端口就不好使了,得直接指定端口号进行添加:


总结就是最好直接针对端口号和协议号添加规则,而且 firewalld 使用起来限制比较多,可以直接使用 iptables,它支持很多复杂的参数,针对协议、来源端口、目标端口等,如公有云的安全组(阿里云提供的硬件防火墙)也是基于 iptables 这样的规则添加的。
¶zone概念
firewalld 中把网络接口与 zone 绑定,不同 zone(public、trusted、internal 等)可有不同规则策略,以细分安全级别。
| 区域名称 | 信任级别 | 默认策略 | 典型应用场景 |
|---|---|---|---|
| drop | 最低 | 丢弃所有传入流量,不回应任何请求,允许所有传出流量 | 最高安全性,完全隐藏设备,如黑洞防护 |
| block | 低 | 拒绝所有传入流量(返回 ICMP 端口不可达),允许所有传出流量 | 仅允许受信任的系统主动连接 |
| public | 低 | 允许出站连接,默认拒绝所有入站连接,仅允许 SSH | 公共网络,如 WiFi 热点或陌生环境 |
| external | 中 | 用于 NAT 路由,默认只允许出站连接 | 服务器充当路由器,保护内部网络 |
| dmz | 中 | 允许外部访问特定服务,如 HTTP/HTTPS,默认拒绝所有其他流量 | 部署 Web 服务器或公共服务的隔离区域 |
| work | 高 | 允许内部可信网络的访问,默认允许 SSH、Samba | 公司内部网络,适用于员工办公环境 |
| home | 高 | 允许家用网络的访问,默认允许 SSH、Samba、mDNS | 家庭网络,适用于个人设备互通 |
| internal | 高 | 允许内部设备访问,默认允许 SSH、Samba、mDNS | 受信任的局域网,如 VPN 连接 |
| trusted | 最高 | 允许所有流量(入站和出站) | 完全信任的环境,如封闭内网 |
查看当前默认区域:
1 | firewall-cmd --get-default-zone |
修改默认区域:
1 | sudo firewall-cmd --set-default-zone=work |
列出所有区域的名字:
1 | firewall-cmd --get-zones |
查询某个区域的默认规则:
1 | firewall-cmd --zone=public --list-all |

变更某个接口的区域:
1 | sudo firewall-cmd --zone=home --change-interface=eth0 --permanent |
然后重新加载防火墙:
1 | sudo firewall-cmd --reload |
¶复杂规则
可借助 --add-rich-rule 来添加更复杂的匹配条件,如限制特定 IP 地址、端口、协议等;或直接使用 iptables 语法进行自定义,注意与 firewalld 的并存管理时要小心冲突。
¶3.计划任务(crontab)
计划任务让系统在指定时间周期自动执行某些脚本或命令,例如:
- 定时备份数据库,每天凌晨 2 点;
- 定时清理日志文件或临时文件夹。
¶编辑与常用操作
1 | crontab -e # 编辑当前用户的计划任务 |
条目格式:
MIN HOUR DAY MONTH WEEKDAY command

注意:
- 写在定时任务里的命令必须是绝对路径,不容易出错
- 日期和星期是不能同时写的
- WEEKDAY 从 0 到 7 分别表示周日到周六
- 四个符号
*表示取值范围中的每一个数字-是做连续区间表达式的,想要表达1-7就直接写1-7即可/表示每多少个,例如想每十分钟一次,可以在分的位置写*/10,表示多个取值例如想在 1 点、2 点、6 点执行,可以写1,2,6
例如,每天凌晨 1:30 运行脚本 /usr/local/bin/backup.sh:
1 | 30 1 * * * /usr/local/bin/backup.sh |
每天凌晨2点30,执行 ntpdate 命令同步 ntp.aliyun.com 且不输入任何信息(也就是把命令结果重定向到黑洞文件 /dev/null):
1 | 30 2 * * * /usr/sbin/ntpdate -u ntp.aliyun.com &> /dev/null |
现在做一个简单的测试,首先运行 crontab -e 进入写定时任务的界面:

可以看到定时任务已经生效了:

¶相关目录
-
/etc/crontab//etc/cron.d:系统级计划任务配置。
-
/etc/cron.daily/,/etc/cron.hourly/,/etc/cron.weekly/,/etc/cron.monthly/:自动分类执行脚本。
要查看 crontab 的日志,可以查找:
1 | grep CRON /var/log/syslog |

¶黑名单和白名单
超级管理员可以通过配置来设置某些用户不允许设置计划任务,配置文件在 /etc/cron.deny,里面每行写一个用户名,白名单在 /etc/allow。白名单优先级高于黑名单,如果一个用户同时存在于两个名单中,则会被默认允许创建计划任务。
¶4.SSH (Secure Shell)
¶作用与原理
SSH (Secure Shell) 提供安全的远程登录方式,可替代明文的 telnet/rsh。常见服务端程序如 sshd,允许远程客户端 ssh user@host 方式连接。
- 默认端口:22
- 加密通信:所有数据(含密码)都通过加密隧道传输,确保安全性。
查看软件的网络配置:

其中 ens 是真实的网卡配置文件。在网卡配置文件中,BOOTPROTO 这一个变量控制的是 IP 的获取方式,其中 dhcp 为动态分配,VMware 虚拟网卡会自动给你分配 IP 地址,而static 为静态 IP,即自己手动根据网络环境设置固定的 IP 地址。一般默认启动 network 服务都是获取 dhcp 动态 IP,可用范围一般是 192.168.0.2 到 192.168.0.254,同时会有一个默认的地址租期,这段时间内某台设备没用的话这个 IP 就会分配给别的设备,网关是流量出去的大门。

要将动态 IP 修改为静态 IP,首先查看这个文件:

需要修改写入的内容形式可以为:
1 | # 对于桥接模式 |
注意 address 写之前记得 ping 一下看看是否存在。最后修改完配置文件记得要重庆网络。
¶启动与管理
1 | systemctl start sshd |
sshd为守护进程名,在某些发行版中也写作ssh。
¶主要配置
配置文件:/etc/ssh/sshd_config。
Port:指定 SSH 监听端口(可修改防止被暴力扫描)。PermitRootLogin:是否允许 root 用户直接登录。PasswordAuthentication:可禁止密码登录,改为公钥方式以提升安全。
¶常见使用场景
-
远程登录:
1
ssh root@192.168.1.100
-
文件传输:
scp或sftp通过 SSH 通道安全地上传/下载文件。 -
SSH 公钥免密:把本地公钥加到目标主机的
~/.ssh/authorized_keys里,即可免密码登录。
四、源码包与二进制包:软件安装模式
¶1.源码包
- 优点:可自由编译选项、适配性好、可进行自定义特性;
- 缺点:手动编译复杂、编译周期长、依赖配置繁琐。
编译安装流程一般为
./configure --prefix=... [--with-... etc]makemake install
安装结果通常放在指定 prefix 路径,需自行创建服务脚本或 systemd unit 文件。
¶2.二进制包
- RPM 系:RedHat/CentOS 等使用的包管理格式,如
yum、dnf。 - DEB 系:Debian/Ubuntu 用 apt/dpkg 安装。
- 优点:安装方便,自动处理依赖,大多数发行版官方仓库都提供常见软件包;
- 缺点:可定制程度较低,版本可能不够新。
RPM(Red Hat Package Manager)是 RedHat 系统的底层包管理工具,yum/dnf 是对其的高层封装。
常见命令:
1 | rpm -ivh package.rpm # 安装 |
更多使用方式
rpm -ql packagename:列出包中安装了哪些文件及路径。rpm -qf /path/to/file:反查某文件属于哪个 RPM 包。yum/dnf:自动依赖解析,在 /etc/yum.repos.d/ 定义源仓库;yum install packagename;dnf update;yum remove packagename。
- 本文标题:Linux 系统服务管理
- 本文作者:Chen Kai
- 创建时间:2025-01-06 00:00:00
- 本文链接:https://www.chenk.top/Linux 系统服务管理/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!