Flexus L 上用 systemd 托管静态页面:自动重启与开机自启实测
最近在一台华为云 Flexus 应用服务器 L 实例(2 核 2G)上部署了一个纯静态的小页面。需求很简单:外网能访问、进程挂了能自己拉起、服务器重启后自动恢复。没有装 Nginx,直接用系统自带的 Python 加 systemd 完成,记录一下步骤和几个容易踩的点。
一、准备静态文件
把页面放到一个固定目录,例如 /opt/hc-activity/,入口文件是 index.html。目录权限保持 root 可读即可,服务用 root 跑 80 端口最省事;如果想用普通用户,要么换 1024 以上端口,要么给 python3 加 cap_net_bind_service 能力。
mkdir -p /opt/hc-activity
cp index.html /opt/hc-activity/
python3 --version # 华为云公共镜像一般自带 Python 3
二、编写 systemd 单元
新建 /etc/systemd/system/hc-activity-web.service:
[Unit]
Description=hc-activity static site
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt
ExecStart=/usr/bin/python3 -m http.server 80 --bind 0.0.0.0
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
注意 WorkingDirectory 设为 /opt,这样访问路径就是 http://公网IP/hc-activity/index.html;如果希望根路径直接出页面,把它设成 /opt/hc-activity,或者 Python 3.7+ 用 --directory 参数。
systemctl daemon-reload
systemctl enable --now hc-activity-web.service
systemctl status hc-activity-web.service
三、放通安全组
服务起来后本机 curl -I http://127.0.0.1/ 返回 200,但外网访问不通,原因几乎都是安全组。Flexus L 实例在控制台的「防火墙」页签里添加入方向规则,协议 TCP、端口 80、源地址 0.0.0.0/0。如果系统里还开了 firewalld 或 ufw,也要同步放通。
四、验证自动恢复
三件事都要实际测一下,而不是只看配置:
- 外网可达:在自己电脑上
curl -s -o /dev/null -w "%{http_code}" http://公网IP/hc-activity/index.html,应输出 200。 - 进程崩溃自动拉起:
kill -9 $(systemctl show -p MainPID --value hc-activity-web),3 秒后systemctl status应显示新的 PID,日志里有 “Scheduled restart job”。 - 开机自启:
systemctl is-enabled hc-activity-web输出 enabled;条件允许的话重启一次实例,确认无需登录即可访问。
五、几个坑
Restart=always默认有启动频率限制(10 秒内 5 次),如果程序本身起不来会被 systemd 放弃,状态变成 failed。排查时看journalctl -u hc-activity-web -n 50,修好后需要systemctl reset-failed。After=network.target不等于网络已就绪,绑定具体 IP 时建议用network-online.target;绑定 0.0.0.0 则影响不大。http.server是单线程开发服务器,适合演示页、活动页这类低流量场景;正式业务还是建议 Nginx,并配合 HTTPS。- 修改单元文件后一定要
daemon-reload,否则 systemd 用的还是旧配置。
小结
对于轻量的静态页面,“Python 内置服务器 + systemd + 安全组放通”三步就能在 Flexus L 上得到一个可自愈、可开机自启的服务,整个过程不到十分钟,也不需要额外安装软件。验证时以外网 curl 的返回码和 kill 之后的自动恢复为准,比只看 status 更可靠。
- 点赞
- 收藏
- 关注作者
评论(0)