使用 Tornado + systemd 搭建图片静态服务(imgserver)

下面我帮你把这套 Tornado 静态图片服务 + systemd 守护进程 整理成一篇可直接使用的教程,适合放到博客或内部文档里。


使用 Tornado + systemd 搭建图片静态服务(imgserver)

一、环境说明

  • 操作系统:Linux(Ubuntu / CentOS 均可)

  • Python:Python 3

  • Web 框架:Tornado

  • 监听端口:7097

  • 图片目录:

    复制代码
    /www/wwwroot/study_front.kuitao8.com/resources/upload

二、编写 Tornado 静态文件服务

1️⃣ 创建服务脚本

编辑 server.py

bash 复制代码
vim /www/wwwroot/test.example.com/resources/server.py

内容如下:

python 复制代码
from tornado.web import Application
from tornado.ioloop import IOLoop
import tornado.web

def make_app():
    urls = [
        (
            r"/upload/(.*)",
            tornado.web.StaticFileHandler,
            {
                "path": "/www/wwwroot/test.example.com/resources/upload"
            }
        ),
    ]
    return Application(urls)

if __name__ == "__main__":
    app = make_app()
    app.listen(7097)
    IOLoop.instance().start()

2️⃣ 访问示例

假设上传目录下有文件:

复制代码
/www/wwwroot/test.example.com/resources/upload/test.jpg

浏览器访问:

复制代码
http://服务器IP:7097/upload/test.jpg

三、创建 systemd 服务(开机自启)

为了让 Tornado 服务后台运行、自动重启、开机启动,使用 systemd 管理。

1️⃣ 创建服务文件

bash 复制代码
vim /etc/systemd/system/imgserver.service

内容如下:

ini 复制代码
[Unit]
Description=imgserver
After=syslog.target network.target

[Service]
User=root
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/bin/python3"
ExecStart=/usr/bin/python3 /www/wwwroot/test.example.com/resources/server.py
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

💡 说明

  • ExecStart:指定 Python3 和服务脚本路径
  • Restart=always:服务异常退出自动重启
  • User=root:以 root 用户运行(如需更安全可改为普通用户)

四、systemd 服务管理命令

1️⃣ 重新加载 systemd 配置

bash 复制代码
systemctl daemon-reexec
systemctl daemon-reload

2️⃣ 设置开机自启

bash 复制代码
systemctl enable imgserver.service

3️⃣ 启动服务

bash 复制代码
systemctl start imgserver.service

4️⃣ 查看运行状态

bash 复制代码
systemctl status imgserver.service

5️⃣ 重启服务

bash 复制代码
systemctl restart imgserver.service

6️⃣ 停止服务

bash 复制代码
systemctl stop imgserver.service

五、常见问题排查

🔍 1. 端口是否监听成功

bash 复制代码
ss -lntp | grep 7097

🔍 2. 查看日志

bash 复制代码
journalctl -u imgserver.service -f

🔍 3. 目录权限问题

确保 Tornado 进程对图片目录有读取权限:

bash 复制代码
chmod -R 755 /www/wwwroot/test.example.com/resources/upload

六、适用场景

  • 图片 / 文件静态服务
  • 前端上传资源访问
  • 轻量级 CDN 替代方案
  • 内网文件分发服务
相关推荐
m0_748554812 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
smj2302_796826522 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀3 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
九转成圣3 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
SmartRadio3 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
2501_901200533 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
laowangpython3 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
我叫汪枫3 小时前
在后台管理系统中,如何递归和选择保留的思路来过滤菜单
开发语言·javascript·node.js·ecmascript
_.Switch3 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
软件技术NINI3 小时前
webkit简介及工作流程
开发语言·前端·javascript·udp·ecmascript·webkit·yarn