Linux系统的系统服务与DHCP服务
一、系统服务
一、crond介绍
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。/etc/crontab文件包括下面几行:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。下面是几个特殊的文件介绍:
文件:/etc/cron.deny 该文件中所列用户不允许使用crontab命令
文件:/etc/cron.allow 该文件中所列用户允许使用crontab命令
文件:/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
二、crontab 文件格式
crontab 文件中每一行代表一项任务,分为六个字段,格式如下:
plaintext
minute hour day month week command
各字段含义
- minute:分钟(0-59)
- hour:小时(0-23)
- day:日期(1-31)
- month:月份(1-12 或 jan,feb 等)
- week:星期(0-7,0 或 7 代表星期日,或 sun,mon 等)
- command:要执行的命令或脚本
特殊字符用法
*
:代表所有可能的值,
:指定列表范围,如 "1,3,5"-
:表示整数范围,如 "2-6"/
:指定时间间隔频率,如 "*/10" 表示每 10 分钟
三、crond 服务管理
安装 crontab
bash
yum install crontabs
服务基本操作
bash
systemctl start crond # 启动服务
systemctl stop crond # 关闭服务
systemctl restart crond # 重启服务
systemctl reload crond # 重新载入配置
systemctl status crond # 查看服务状态
开机启动设置
bash
systemctl enable crond # 加入开机自动启动
ntsysv # 查看是否已设置为开机启动
四、crontab 命令详解
命令格式
bash
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
主要参数
-u user
:设定指定用户的 crontab 服务(一般 root 使用)file
:将文件作为 crontab 任务列表文件载入-e
:编辑 crontab 文件内容(默认当前用户)-l
:显示 crontab 文件内容(默认当前用户)-r
:删除 crontab 文件(默认当前用户)
二、DHCP服务
一、DHCP 协议基础认知
什么是 DHCP
DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一种用于动态分配 IP 地址的网络协议,采用 C/S(客户端 / 服务器)架构。
核心端口信息
- 服务端监听端口:67/udp
- 客户端监听端口:68/udp
主要优势
- 大幅提高网络配置效率
- 有效减少手动配置带来的错误
三种分配方式
- 手动分配:工程师进行地址绑定,IP 地址固定不变
- 自动分配:一次性分配后不进行地址回收
- 动态分配:最常用方式,会进行地址回收和重复利用
应用场景
- 需要准确配置网络参数的环境
- 大型网络环境中(减少管理成本)
注意:同一网络环境下不允许存在多个 DHCP 服务器,会导致地址分配冲突
二、DHCP 工作流程详解
- 发现阶段:客户端发送 discover 广播包,寻找网络中的 DHCP 服务器
- 邀约阶段:DHCP 服务器回应 Offer 广播包,携带可用 IP 地址信息
- 请求阶段:客户端选择 IP 地址后,发送 Request 广播包确认请求
- 确认阶段:服务端发送 Ack 广播包,确认 IP 地址分配并告知租约期
租约管理
- 租约更新时机:当租约期达到 50% 时,客户端主动请求更新
- 客户端重启后:
- 若原 IP 地址空闲,服务端直接回应 Ack
- 若原 IP 地址被占用,服务端回应 noAck,客户端需重新执行完整流程
不同系统客户端特性
- Linux 系统:DHCP 服务器不存在时,没有 IP 地址
- Windows 系统:DHCP 服务器不存在时,会启用备用 IP(169.254.0.0/16 ~ 168.254.255.255/16)
三、DHCP 服务部署与配置
基础环境准备
- 关闭防火墙及 SElinux
shell
# 关闭防火墙
[root@dhcpserver ~]# systemctl stop firewalld && systemctl disable firewalld# 临时关闭SElinux
[root@dhcpserver ~]# setenforce 0# 永久关闭SElinux(需重启)
[root@dhcpserver ~]# vim /etc/selinux/config
SELINUX=enforcing 改为 SELINUX=disabled
- 配置静态 IP 地址
shell
# 关闭网络图形化工具
[root@dhcpserver ~]# systemctl stop NetworkManager ; systemctl disable NetworkManager# 配置网卡信息
[root@dhcpserver ~]# cd /etc/sysconfig/network-scripts/
[root@dhcpserver ~]# cat ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.100.254
PREFIX=24# 重启网络服务
[root@dhcpserver ~]# systemctl restart network
安装 DHCP 服务
shell
[root@localhost ~]# yum install -y dhcp-server
核心配置文件路径
- 配置文件存储:/etc/dhcp
- 默认配置文件副本:/usr/share/doc/dhcp-4.2.5/
- 数据文件存储:/var/lib/dhcpd
- 核心配置文件:/etc/dhcp/dhcpd.conf
配置文件初始化
shell
[root@dhcpserver ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/
[root@dhcpserver ~]# cd /etc/dhcp/
[root@dhcpserver ~]# cp dhcpd.conf.example dhcpd.conf
四、常见配置场景
1. 单一地址池配置
shell
[root@dhcpserver dhcp]# cat dhcpd.conf | grep -v "^#" | grep -v "^$"
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.100.0 netmask 255.255.255.0 {range 192.168.100.100 192.168.100.200; # 地址范围option domain-name-servers ns1.internal.example.org;option domain-name "internal.example.org";option routers 192.168.100.254; # 网关地址option broadcast-address 192.168.100.255; # 广播地址default-lease-time 600;max-lease-time 7200;
}
2. 地址绑定配置(固定 IP 分配)
shell
# 在配置文件中添加
host s1 {hardware ethernet 00:0c:29:dd:24:41; # 客户端MAC地址fixed-address 192.168.100.110; # 绑定的IP地址
}# 重启服务生效
[root@dhcpserver dhcp]# systemctl restart dhcpd
3. 多地址池配置(跨网段分配)
路由器配置(中继代理)
shell
# 安装dhcp中继工具
[root@nginx1 ~]# yum install -y dhcp# 开启路由转发功能
[root@nginx1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@nginx1 ~]# sysctl -p# 配置双网卡IP
[root@nginx1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.100.253
PREFIX=24# 启动DHCP中继
[root@nginx1 ~]# dhcrelay 192.168.100.254 # 指定DHCP服务器地址
DHCP 服务器多网段配置
shell
# 在dhcpd.conf中添加第二个网段配置
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.100 192.168.200.200;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 192.168.200.253; # 对应网段网关
option broadcast-address 192.168.200.255;
default-lease-time 600;
max-lease-time 7200;
} # 重启服务
[root@dhcpserver ~]# systemctl restart dhcpd
五、服务管理与验证
重启 DHCP 服务
shell
[root@dhcpserver dhcp]# systemctl restart dhcpd
验证服务监听状态
shell
[root@dhcpserver dhcp]# netstat -anptu | grep :67
udp 0 0 0.0.0.0:67 0.0.0.0:* 28005/dhcpd
客户端获取 IP 验证
shell
# 重新获取IP
[root@client ~]# ifdown ens34 ; ifup ens34# 查看获取的IP地址
[root@client ~]# ip a
六、常见故障排查
- 服务启动异常:重点排查配置文件语法错误,检查修改的配置段
- 地址分配异常:
- 先检查网络连接是否正常
- 再检查 subnet 字段配置是否与实际网络匹配
- 确认租约是否过期或 IP 地址池是否耗尽