RHEL 7.9系统下为Ticktok服务预留4590端口的方法咨询
RHEL 7.9系统下为Ticktok服务预留4590端口的方法咨询
嘿,这个场景我太熟悉了——服务偶尔停机维护,重启时却发现端口被其他程序抢了导致启动失败,在RHEL 7.9上要搞定这个问题,有两个实用方案,其中第二个最贴合你的需求:
方案一:通过内核参数预留端口,阻止随机分配
这个方法是告诉Linux内核,4590端口不要分配给那些随机使用端口的程序,只有明确指定绑定该端口的服务才能使用它:
- 创建一个自定义的sysctl配置文件:
touch /etc/sysctl.d/99-reserve-ports.conf - 编辑这个文件,添加一行配置:
net.ipv4.ip_local_reserved_ports = 4590 - 执行命令让配置立即生效:
sysctl -p /etc/sysctl.d/99-reserve-ports.conf
注意:这个方法只能阻止内核随机分配端口,但如果有程序硬编码绑定4590端口,还是有可能占用它,不过绝大多数正常程序不会这么做。
方案二:用systemd Socket单元锁定端口(推荐)
这个方法是让systemd全程持有4590端口,不管Ticktok服务是运行还是停机维护,端口都不会被其他程序抢走,完美适配你的维护场景:
创建Ticktok的Socket单元文件
创建/etc/systemd/system/ticktok.socket,写入以下内容:[Unit] Description=Ticktok Service Socket [Socket] ListenStream=4590 BindIPv6Only=ipv6-only # 如果不需要IPv6可以改成"no" [Install] WantedBy=sockets.target修改Ticktok的systemd服务文件
找到你的Ticktok服务文件(通常是/etc/systemd/system/ticktok.service),在对应段添加配置:- 在
[Unit]段添加:Requires=ticktok.socket After=ticktok.socket - 在
[Service]段添加(如果服务支持socket激活的话):StandardInput=socket StandardOutput=socket
如果Ticktok服务本身是自己绑定4590端口的,你可能需要调整服务的启动参数,让它使用systemd提供的socket而非自行绑定端口,具体可以参考服务的官方文档调整启动命令。
- 在
重新加载systemd配置并启用服务
- 执行命令刷新systemd配置:
systemctl daemon-reload - 启动并启用socket服务:
systemctl enable --now ticktok.socket - 之后正常启动Ticktok服务即可:
systemctl start ticktok.service
- 执行命令刷新systemd配置:
这样一来,哪怕Ticktok服务停机维护,4590端口也会被systemd的socket单元牢牢占用,其他程序根本无法绑定这个端口,彻底解决你的问题。
备注:内容来源于stack exchange,提问作者King David
相关产品推荐
相关产品推荐

