建站网站苏州wordpress 文章钩子
建站网站苏州,wordpress 文章钩子,棋牌类网站设计建设,wordpress小说网站Fun-ASR-MLT-Nano-2512部署教程#xff1a;用systemd服务化管理#xff08;告别nohuppid文件#xff09;
你是不是还在用 nohup 启动后台服务#xff0c;然后手动管理 pid 文件来停止或重启#xff1f;每次重启服务器都要重新跑一遍启动命令#xff0c;日志文件越积越大…Fun-ASR-MLT-Nano-2512部署教程用systemd服务化管理告别nohuppid文件你是不是还在用nohup启动后台服务然后手动管理pid文件来停止或重启每次重启服务器都要重新跑一遍启动命令日志文件越积越大服务状态全靠ps aux | grep来猜今天我来分享一个更专业、更可靠的部署方案——用systemd来管理你的 Fun-ASR-MLT-Nano-2512 语音识别服务。这就像给你的服务请了个24小时在线的专业管家开机自启、自动重启、日志轮转、状态监控全都帮你搞定。1. 为什么需要systemdnohup的痛点我们先来看看传统的nohup启动方式有什么问题cd /root/Fun-ASR-MLT-Nano-2512 nohup python app.py /tmp/funasr_web.log 21 echo $! /tmp/funasr_web.pid这个方法看起来简单但实际上有很多隐患1. 服务状态管理困难服务挂了不会自动重启重启服务器后服务不会自动启动查看服务状态需要手动ps aux | grep停止服务需要先找到pid再kill2. 日志管理混乱日志文件会无限增长占用磁盘空间没有日志轮转时间长了文件太大打不开所有日志混在一起排查问题困难3. 缺乏监控和告警服务异常退出没人知道内存泄漏、CPU占用过高无法及时发现没有健康检查机制4. 多实例管理麻烦如果想启动多个实例需要手动管理多个pid文件端口冲突需要手动处理配置文件分散管理困难而systemd就是为了解决这些问题而生的。它是现代Linux系统的服务管理器提供了完整的服务生命周期管理能力。2. systemd服务文件配置让我们一步步来创建systemd服务。首先创建一个服务配置文件。2.1 创建服务文件在/etc/systemd/system/目录下创建服务文件sudo nano /etc/systemd/system/funasr-nano.service然后输入以下内容[Unit] DescriptionFun-ASR-MLT-Nano-2512 Speech Recognition Service Afternetwork.target Wantsnetwork.target [Service] Typesimple Userroot Grouproot WorkingDirectory/root/Fun-ASR-MLT-Nano-2512 EnvironmentPATH/usr/local/bin:/usr/bin:/bin EnvironmentPYTHONPATH/root/Fun-ASR-MLT-Nano-2512 # 启动命令 ExecStart/usr/bin/python3 app.py # 重启策略 Restartalways RestartSec10 # 资源限制根据你的服务器配置调整 # LimitNOFILE65535 # LimitNPROC65535 # MemoryMax4G # CPUQuota80% # 标准输出和错误输出到系统日志 StandardOutputjournal StandardErrorjournal SyslogIdentifierfunasr-nano # 环境变量如果需要GPU # EnvironmentCUDA_VISIBLE_DEVICES0 [Install] WantedBymulti-user.target让我解释一下关键配置Description服务的描述信息用systemctl status时会显示Afternetwork.target确保网络就绪后再启动服务Typesimple这是最常见的服务类型systemd会认为服务在ExecStart启动后就准备好了Restartalways服务异常退出时自动重启RestartSec10重启前等待10秒避免频繁重启WorkingDirectory指定工作目录这样你的代码里用相对路径就没问题了StandardOutputjournal把日志输出到systemd的日志系统可以用journalctl查看2.2 如果你的服务需要特定环境有时候你的服务可能需要特定的Python环境比如虚拟环境或者需要激活某些环境变量。可以这样配置[Service] Typesimple Userroot Grouproot WorkingDirectory/root/Fun-ASR-MLT-Nano-2512 # 如果你使用虚拟环境 ExecStart/root/venv/funasr/bin/python app.py # 或者如果你需要source某个环境文件 # ExecStart/bin/bash -c source /root/.bashrc python app.py # 设置环境变量 EnvironmentMODEL_PATH/root/Fun-ASR-MLT-Nano-2512 EnvironmentLOG_LEVELINFO EnvironmentCUDA_VISIBLE_DEVICES0 Restartalways RestartSec102.3 带参数启动的配置如果你的app.py需要接收命令行参数可以这样配置[Service] Typesimple Userroot # 带参数启动 ExecStart/usr/bin/python3 app.py --host 0.0.0.0 --port 7860 --workers 2 # 或者使用环境变量 EnvironmentHOST0.0.0.0 EnvironmentPORT7860 ExecStart/usr/bin/python3 app.py --host ${HOST} --port ${PORT} Restartalways RestartSec103. 部署和管理服务配置文件准备好了现在让我们来部署和管理服务。3.1 重新加载systemd配置每次创建或修改服务文件后都需要重新加载systemd的配置sudo systemctl daemon-reload这个命令不会重启任何服务只是让systemd知道配置文件有变化。3.2 启动服务现在可以启动我们的Fun-ASR服务了sudo systemctl start funasr-nano启动后可以用以下命令检查状态# 查看服务状态 sudo systemctl status funasr-nano # 简洁的状态查看 sudo systemctl is-active funasr-nano # 查看是否启用开机自启 sudo systemctl is-enabled funasr-nano正常启动的话你会看到类似这样的输出● funasr-nano.service - Fun-ASR-MLT-Nano-2512 Speech Recognition Service Loaded: loaded (/etc/systemd/system/funasr-nano.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-01-15 10:30:00 CST; 10s ago Main PID: 12345 (python3) Tasks: 5 (limit: 4915) Memory: 1.2G CGroup: /system.slice/funasr-nano.service └─12345 /usr/bin/python3 app.py3.3 设置开机自启我们希望服务器重启后Fun-ASR服务能自动启动sudo systemctl enable funasr-nano这个命令会在/etc/systemd/system/multi-user.target.wants/目录下创建一个符号链接告诉systemd这个服务需要在多用户模式下自动启动。3.4 停止和重启服务管理服务变得非常简单# 停止服务 sudo systemctl stop funasr-nano # 重启服务先停止再启动 sudo systemctl restart funasr-nano # 重新加载服务如果支持热重载 sudo systemctl reload funasr-nano # 查看服务是否在运行 sudo systemctl is-active funasr-nano3.5 查看日志systemd最大的优点之一就是统一的日志管理。查看Fun-ASR服务的日志# 查看所有日志 sudo journalctl -u funasr-nano # 查看最新的日志类似 tail -f sudo journalctl -u funasr-nano -f # 查看今天以来的日志 sudo journalctl -u funasr-nano --since today # 查看最近100行日志 sudo journalctl -u funasr-nano -n 100 # 查看错误级别的日志 sudo journalctl -u funasr-nano -p err # 查看特定时间段的日志 sudo journalctl -u funasr-nano --since 2024-01-15 09:00:00 --until 2024-01-15 10:00:00日志轮转是自动的你不需要担心日志文件过大systemd会帮你管理。4. 高级配置和优化基本的服务管理已经搞定了现在我们来看看一些高级配置让服务更稳定、更高效。4.1 资源限制配置防止服务占用过多资源影响系统其他服务[Service] # 内存限制 MemoryMax4G MemoryHigh3.5G # CPU限制80%的CPU时间 CPUQuota80% # 进程数限制 TasksMax8192 # 文件描述符限制 LimitNOFILE65535 # 核心转储 LimitCOREinfinity这些配置可以防止内存泄漏导致系统崩溃CPU占用100%影响其他服务文件描述符耗尽进程数过多4.2 多实例部署如果你想部署多个Fun-ASR实例比如在不同端口可以使用模板服务文件# 创建模板服务文件 sudo nano /etc/systemd/system/funasr-nano.service内容如下[Unit] DescriptionFun-ASR-MLT-Nano-2512 Speech Recognition Service (Instance %i) Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/root/Fun-ASR-MLT-Nano-2512 EnvironmentINSTANCE_PORT%i ExecStart/usr/bin/python3 app.py --port ${INSTANCE_PORT} Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启动多个实例# 启动7860端口的实例 sudo systemctl start funasr-nano7860 sudo systemctl enable funasr-nano7860 # 启动7861端口的实例 sudo systemctl start funasr-nano7861 sudo systemctl enable funasr-nano7861 # 查看所有实例状态 sudo systemctl status funasr-nano*4.3 健康检查配置虽然Fun-ASR本身可能没有健康检查接口但我们可以通过systemd的ExecStartPre和ExecStartPost来实现简单的健康检查[Service] Typesimple Userroot WorkingDirectory/root/Fun-ASR-MLT-Nano-2512 # 启动前检查端口是否被占用 ExecStartPre/usr/bin/bash -c if ss -tuln | grep -q :7860; then echo Port 7860 is already in use; exit 1; fi # 启动命令 ExecStart/usr/bin/python3 app.py # 启动后检查服务是否真的起来了 ExecStartPost/bin/sleep 5 ExecStartPost/usr/bin/curl -f http://localhost:7860 || exit 1 Restartalways RestartSec104.4 环境配置文件如果你的服务需要很多环境变量可以单独放在一个配置文件中# 创建环境文件 sudo nano /etc/default/funasr-nano# Fun-ASR环境配置 MODEL_PATH/root/Fun-ASR-MLT-Nano-2512 LOG_LEVELINFO CUDA_VISIBLE_DEVICES0 PORT7860 HOST0.0.0.0然后在服务文件中引用[Service] EnvironmentFile/etc/default/funasr-nano ExecStart/usr/bin/python3 app.py --host ${HOST} --port ${PORT}5. 监控和故障排查服务部署好了我们还需要知道怎么监控和排查问题。5.1 监控服务状态# 查看详细状态 sudo systemctl status funasr-nano # 查看资源使用情况 sudo systemctl show funasr-nano --propertyMemoryCurrent,CPUUsageNSec,TasksCurrent # 查看服务启动时间 sudo systemctl show funasr-nano --propertyActiveEnterTimestamp # 查看重启次数 sudo systemctl show funasr-nano --propertyNAutoRestarts,NRestarts5.2 常见问题排查问题1服务启动失败# 查看详细的启动日志 sudo journalctl -u funasr-nano -b --no-pager # 手动测试启动命令 cd /root/Fun-ASR-MLT-Nano-2512 /usr/bin/python3 app.py问题2服务不断重启# 查看重启原因 sudo journalctl -u funasr-nano --since 5 minutes ago | grep -A 5 -B 5 exited # 查看退出码 sudo systemctl show funasr-nano --propertyExecMainStatus,Result问题3端口被占用# 检查端口占用 sudo ss -tuln | grep :7860 sudo lsof -i :7860 # 查看是哪个服务占用了端口 sudo systemctl list-units --all | grep 7860问题4权限问题# 检查服务运行用户 sudo systemctl show funasr-nano --propertyUser,Group # 检查文件权限 sudo ls -la /root/Fun-ASR-MLT-Nano-2512/ sudo ls -la /root/Fun-ASR-MLT-Nano-2512/model.pt5.3 性能监控# 实时查看资源使用 sudo systemd-cgtop # 查看服务的内存使用 sudo systemd-cgls /system.slice/funasr-nano.service # 查看服务的CPU和内存统计 sudo systemctl show funasr-nano --propertyCPUUsageNSec,MemoryCurrent6. 与传统方式的对比让我们来对比一下systemd和传统的nohup pid方式功能nohup pid 文件systemd 服务启动服务nohup python app.py systemctl start funasr-nano停止服务kill $(cat /tmp/funasr.pid)systemctl stop funasr-nano重启服务手动停止再启动systemctl restart funasr-nano查看状态ps aux | grep pythonsystemctl status funasr-nano开机自启需要写启动脚本systemctl enable funasr-nano日志管理手动管理日志文件journalctl -u funasr-nano日志轮转需要额外配置自动管理自动重启需要监控脚本Restartalways资源限制需要ulimit配置服务文件直接配置多实例管理手动管理多个pid模板服务文件统一管理分散的脚本和文件集中配置管理可以看到systemd在各个方面都更胜一筹。7. 实际部署示例让我们来看一个完整的实际部署示例。假设我们要在生产环境部署Fun-ASR服务。7.1 部署步骤# 1. 克隆项目如果还没做 cd /root git clone https://github.com/FunAudioLLM/Fun-ASR-MLT-Nano-2512.git cd Fun-ASR-MLT-Nano-2512 # 2. 安装依赖 pip install -r requirements.txt apt-get install -y ffmpeg # 3. 创建systemd服务文件 sudo tee /etc/systemd/system/funasr-nano.service EOF [Unit] DescriptionFun-ASR-MLT-Nano-2512 Speech Recognition Service Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/root/Fun-ASR-MLT-Nano-2512 ExecStart/usr/bin/python3 app.py --host 0.0.0.0 --port 7860 Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal SyslogIdentifierfunasr-nano # 资源限制 MemoryMax4G CPUQuota80% LimitNOFILE65535 [Install] WantedBymulti-user.target EOF # 4. 重新加载systemd配置 sudo systemctl daemon-reload # 5. 启动服务 sudo systemctl start funasr-nano # 6. 设置开机自启 sudo systemctl enable funasr-nano # 7. 检查状态 sudo systemctl status funasr-nano # 8. 查看日志 sudo journalctl -u funasr-nano -f7.2 验证服务# 检查服务是否正常运行 curl http://localhost:7860 # 或者用浏览器访问 # http://你的服务器IP:7860 # 检查端口监听 sudo netstat -tulnp | grep 7860 # 检查进程 ps aux | grep python app.py7.3 创建管理脚本为了方便管理可以创建一个简单的管理脚本#!/bin/bash # funasr-manager.sh SERVICE_NAMEfunasr-nano case $1 in start) sudo systemctl start $SERVICE_NAME sudo systemctl status $SERVICE_NAME ;; stop) sudo systemctl stop $SERVICE_NAME ;; restart) sudo systemctl restart $SERVICE_NAME sudo systemctl status $SERVICE_NAME ;; status) sudo systemctl status $SERVICE_NAME ;; logs) sudo journalctl -u $SERVICE_NAME -f ;; enable) sudo systemctl enable $SERVICE_NAME ;; disable) sudo systemctl disable $SERVICE_NAME ;; *) echo Usage: $0 {start|stop|restart|status|logs|enable|disable} exit 1 ;; esac给脚本执行权限chmod x funasr-manager.sh然后就可以用简单命令管理了./funasr-manager.sh start ./funasr-manager.sh status ./funasr-manager.sh logs8. 总结通过今天的教程我们成功地将Fun-ASR-MLT-Nano-2512语音识别服务从传统的nohup方式升级到了专业的systemd服务化管理。让我们回顾一下主要收获1. 告别了繁琐的手动管理不再需要手动管理pid文件不再需要写复杂的启动脚本不再担心服务挂掉没人知道2. 获得了完整的服务生命周期管理一键启动、停止、重启自动故障恢复Restartalways开机自动启动统一的日志管理3. 提升了服务可靠性资源限制防止服务拖垮系统健康检查确保服务真正可用监控和告警更容易实现4. 标准化了部署流程服务配置集中管理部署步骤可重复多实例部署变得简单5. 为生产环境做好准备systemd是生产环境的标准更容易集成到现有的运维体系更好的可观测性迁移到systemd后你的Fun-ASR服务就像有了一个24小时在线的专业运维工程师。服务异常会自动重启服务器重启后服务自动恢复日志自动轮转资源使用受控状态一目了然。最重要的是这一切都是免费的是Linux系统自带的强大功能。你不需要安装额外的监控软件不需要写复杂的维护脚本只需要一个简单的服务配置文件。现在你可以放心地把Fun-ASR服务部署到生产环境专注于你的语音识别应用开发而不是整天担心服务会不会挂掉。这就是专业部署和业余部署的区别。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。