Supervisor后台进程守护工具

超强进程管理工具Supervisor 给大家推荐一款超强进程管理工具: Supervisor。 阅读详情

一.简介

Supervisor是一套用Python开发的进程管理程序,能将以命令启动的进程以后台守护方式运行(注:只支持将前台运行的程序转为后台,不支持后台转后台),并监控当前后台进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的相关信息和命令配置进去即可。可用来将相关服务挂掉的时候自动启动起来,将supervisor配置开机自启动后可使服务进程像小强一样坚强——开机跟随自启,挂掉自动重开!

注:本文环境使用CenterOS 7 + Python 3.7 + Supervisor 4.2.0

二.安装

1.使用python的pip安装
pip install supervisor
2.使用centos的yum安装
yum -y install supervisor

三.说明

1.使用yum安装的supervisor

通过yum安装方式安装的supervisor相关配置文件已经安装OK,可使用命令查看
注:supervisor的配置文件注释是“;”

vi /etc/supervisor/supervisord.conf
2.使用pip安装的supervisor

通过pip安装的supervisor是没有将相关配置文件配置到相关路径的,需要自己手动配置。先找到supervisor路径,一般在当前python环境的bin目录下。
1)先进入supervisor文件目录

cd /usr/local/python-3.7/bin/

2)找到echo_supervisord_conf文件,新建目录并生成supervisor配置文件

mkdir /etc/supervisor /etc/supervisor/conf.d

/usr/local/python-3.7/bin/echo_supervisord_conf > /etc/supervisor/supervisord.conf

3)设置supervisord和supervisorctl的软连接到/user/bin目录下,方便调用

ln -s /usr/local/python-3.7/bin/supervisord /usr/bin/suppervisord

ln -s /usr/local/python-3.7/bin/supervisorctl /usr/bin/suppervisorctl

四.配置文件说明

supervisor.conf配置文件说明:
[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid
 
;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码
 
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200
 
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord
 
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程
 
;包含其它配置文件
[include]
files = relative/directory/*.ini    ;可以指定一个或多个以.ini结束的配置文件
需要管理的服务配置文件说明

在/etc/supervisor下创建conf.d用于放置需要管理的服务配置文件

[program:blog] ; 项目名
directory=/opt/bin ; 脚本目录
command=/usr/bin/python /opt/bin/test.py ; 脚本执行命令
autostart=true ; supervisor启动的时候是否随着同时启动,默认True
autorestart=false ; 当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
startsecs=1 ; 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
user = test ; 脚本运行的用户身份 

stderr_logfile=/tmp/blog_stderr.log ; 错误日志输出 
stdout_logfile=/tmp/blog_stdout.log ; 输出日志输出
redirect_stderr = true ; 把stderr重定向到stdout,默认 false
stdout_logfile_maxbytes = 20M ; stdout日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout日志文件备份数

五.常用命令

supervisord -v              					//查看supervisor版本
supervisord -c /etc/supervisor/supervisord.conf  //启动supervisor
supervisorctl status        //查看所有进程的状态
supervisorctl stop all       //停止es
supervisorctl start all      //启动es
supervisorctl restart       //重启es
supervisorctl update        //配置文件修改后使用该命令加载新的配置
supervisorctl reload        //重新启动配置中的所有程序

六.常见问题

1.出现unix:///var/run/supervisor.sock no such file

将supervisor配置文件将file=/tmp/supervisor.sock改为file=/var/run/supervisor.sock,并在/var/run/下新建supervisor.sock文件,并chmod -R 777 supervisor.sock 给予读写权限

2.使用supervisorctl status查看发现有进程被不断重启

supervisor只支持前台程序的托管到后台,例如redis就需要把配置文件中的daemonize设置为no,nginx就需要在命令行后缀增加-g ‘daemon off;’

; uwsgi
[program:featech_v2_0] ; 进程名
command = /root/.virtualenvs/featech_v2_0/bin/uwsgi --ini uwsgi.ini ; 启动命令
directory = /home/featech_v2_0/ ; 项目路径
stderr_logfile=/opt/qy/featech_v2_0/supervisord.uwsgi.err.log ; 错误日志文件
stdout_logfile=/opt/qy/featech_v2_0/supervisord.uwsgi.out.log ; 输出日志文件
autostart=true ; 跟随supervisor启动
autorestart=true ; 自动重启
;redirect_stderr=true ; 重定向stderr到stdout

; redis
[program:redis] ; 进程名
command = redis-server redis.conf ; 启动命令
directory = /usr/local/redis-3.2.3/ ; 项目路径
stderr_logfile=/opt/qy/featech_v2_0/supervisord.redis.err.log ; 错误日志文件
stdout_logfile=/opt/qy/featech_v2_0/supervisord.redis.out.log ; 输出日志文件
autostart=true ; 跟随supervisor启动
autorestart=true ; 自动重启
;redirect_stderr=true ; 重定向stderr到stdout

; mysql
[program:mysql] ; 进程名
command = /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/db/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/db/mysql/error.log --open-files-limit=3072 --pid-file=/db/mysql/VM_16_10_centos.pid --socket=/tmp/mysql.sock --port=3306 ; 启动命令
directory = /home/featech_v2_0 ; 项目路径
stdout_logfile=/opt/qy/featech_v2_0/supervisord.mysql.out.log ; 输出日志文件
autostart=true ; 跟随supervisor启动
autorestart=true ; 自动重启
;redirect_stderr=true ; 重定向stderr到stdout

; nginx
[program:nginx] ; 进程名
command = nginx -g 'daemon off;' ; 启动命令
directory = /home/featech_v2_0 ; 项目路径
stdout_logfile=/opt/qy/featech_v2_0/supervisord.nginx.out.log ; 输出日志文件
autostart=true ; 跟随supervisor启动
autorestart=true ; 自动重启
;redirect_stderr=true ; 重定向stderr到stdout

; celery
[program:celery] ; 进程名
command = /root/.virtualenvs/featech_v2_0/bin/celery -A celery_tasks.sms.tasks worker -l info -c 10 ; 启动命令
directory = /home/featech_v2_0 ; 项目路径
stdout_logfile=/opt/qy/featech_v2_0/supervisord.celery.out.log ; 输出日志文件
autostart=true ; 跟随supervisor启动
autorestart=true ; 自动重启
;redirect_stderr=true ; 重定向stderr到stdout

注:uwsgi因为有自重启功能,挂载到supervisor是为了开机自启也便于统一管理

七.配置supervisor开机自启

a) 新建一个“supervisord.service”文件

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

b) 将文件拷贝至"/usr/lib/systemd/system/supervisord.service"

c) 执行命令

systemctl enable supervisord

d) 执行命令来验证是否为开机启动

systemctl is-enabled supervisord

e) 执行刷新配置

systemctl daemon-reload

f) 测试是否能正常运行

systemctl start supervisord.service

参考链接:
https://www.jianshu.com/p/0b9054b33db3
https://www.jianshu.com/p/39b476e808d8

Supervisor - 进程守护工具 Supervisor 简介 Supervisor /ˈsuːpərvaɪzər/ 监督人,[管理] 管理人;检查员 ​ Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台守护进程,并监控进程状态,异常退出时能自动重... 阅读详情

相关推荐

进程守护工具restart-guard:轻量级高可用的进程保活方案

在服务器运维和后台服务开发中,进程监控与守护是保障服务持续可用的基础技术。其核心原理是通过父进程监控子进程的生命周期,利用操作系统提供的进程间通信机制(如SIGCHLD信号)来感知进程状态变化,一旦检测到进程异常退出,便依据预设策略自动重启。这项技术的核心价值在于提升服务的可靠性和自愈能力,减少人工干预,尤其适用于需要长时间稳定运行的后台任务、数据抓取脚本或自定义守护进程。在实际应用场景中,开发者常面临systemd配置复杂、容器内管理不便或简易脚本可靠性不足等挑战。本文聚焦的restart-guard项目

weixin_28730403的博客 378

windows守护进程工具-nssm使用-守护进程-创建服务

nssm是一个服务封装程序,它可以将普通exe程序封装成服务,实现开机自启动,同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。它的特点如下:支持普通exe程序(控制台程序或者带界面的Windows程序都可以)安装简单,修改方便可以自动守护封装了的服务,程序挂掉了后可以自动重启非常好用的开源工具,可以解决一些程序可能因为异常而退出的问题。

插件开发 3276

Supervisor管理服务,实现异常死亡进程自动重启

一.Supervisor基础介绍 1.supervisor是什么 supervisor是用python语言开发的一个进程管理工具,官方介绍说: Supervisor: A Process Control System,Supervisor是一个客户端/服务器系统,允许其用户监视和控制类UNIX操作系统上的许多进程 1.supervisord 服务器主进程名为supervisord。它负责在自己的调用中启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出,

qq_42707967的博客 1804

系统服务管理知识-进程守护工具:supervisor

进程管理工具之Supervisor

李指导的博客 3152

Supervisor使用详解

一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为superviso

Valiant 的博客 8303

进程守护者 process guard

windows系统中 经常跑exe程序,由各种原因可能导致exe执行程序死掉退出,可用改程序实现对exe程序监控,如果进程中没有找到,说明死掉了,Daemon.exe可以帮你重新启动 进程守护者 process guard为本人业余开发,为了工作方便之用。

Linux守护进程详解

守护进程(Daemon)是指在后台运行的进程,通常用于执行系统级的任务,如日志记录、定时任务、网络服务等。守护进程不与用户直接交互,且在系统启动时自动运行。创建和管理守护进程有多种方法,systemd是现代Linux系统中最常用的方法,提供了强大的功能和灵活的配置选项。也是一个不错的选择,特别适用于需要精细控制进程的场景。nohup则适用于简单的后台运行需求。选择哪种方法取决于你的具体需求和系统的配置。希望这篇文章能帮助你更好地理解和使用Linux守护进程。

一起学习哈 1050

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3844

进程管理工具之supervisor[详解]

原文链接:https://blog.youkuaiyun.com/weixin_42390791/article/details/88866237 一、问题背景1、背景​   如何才能让一个进程摆脱终端,获得相对较长的生命周期? 2、后台(守护)、前台进程  ​什么是守护进程?通俗点讲就是后台跑着的进程,不会因为你关了终端服务就会随之停止,直到你把计算机的电源关闭。当进程变为后台进程后,同...

weixin_30888413的博客 293

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

CATIA_V5R2019/DELMIA_V5R2019安装包下载及安装教程破解

一只机械工装熊的博客 8407

jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

目录前言将income 作为loss(优化目标)读取数据,定义优化目标模型训练与微调提交结果多目标学习Topline整理AE+MLP (rank10)Current 17th solution: Ensembles of deep (49 layer) MLPsmixup augmentation: a way to learn from trades with weight=0 (rank4)My (perhaps) over-complicated LSTM solutionCurrent 62nd .

weixin_51484067的博客 2641

Supervisor进程守护监控

运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。supervisor是所有进程的父进程,管理着启动的子进展,supervisor以子进程的PID来管理子进程,当子进程异常退出时supervisor可以收到相应的信号量。

墨痕诉清风的博客 3267

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 130

Supervisor进程守护

这里写目录标题Supervisor概述配置Supervisor一、安装Supervisor二、配置Supervisor三、运行Supervisorsupervisor常用命令 Supervisor概述 Supervisor的定义是超级用户,监管员。Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退

weixin_49780168的博客 584

EMC工程师职业发展:从测试整改到系统设计的进阶之路

电磁兼容(EMC)是确保电子设备在复杂电磁环境中可靠工作的关键技术,其核心在于控制电磁干扰(EMI)并提升抗扰度。其基本原理涉及电磁场理论、噪声耦合路径与滤波屏蔽技术。对于电子产品而言,EMC设计直接关系到能否通过CE、FCC等强制性认证,是产品上市和市场竞争力的关键。在工程实践中,EMC工程师需要从电路设计、PCB布局、元器件选型等源头入手,将EMC要求融入产品开发全流程,实现从后期“整改”到前期“设计预防”的价值跃迁。本文聚焦EMC工程师的核心能力体系构建与职业发展路径,深入探讨了如何从掌握标准测试、电

weixin_30819085的博客 392

STM32串口通信实战:从CubeMX配置到printf重定向全解析

串口通信是嵌入式系统中最基础且广泛使用的数据交换方式,它基于异步串行通信原理,通过TX(发送)和RX(接收)两根信号线实现设备间的全双工通信。其技术价值在于协议简单、硬件成本低、可靠性高,是单片机与上位机调试、传感器数据采集、设备控制等场景的首选方案。在STM32等ARM Cortex-M系列MCU中,USART外设通过硬件自动处理时序,大大减轻了CPU负担。本文聚焦于嵌入式竞赛与开发中的高频需求,以STM32G431RBT6为例,详解通过CubeMX配置USART1、实现按键触发数据发送、并完成print

weixin_30603633的博客 548

python守护进程工具_supervisor: 基于python开发的通用进程管理工具

supervisor 介绍supervisor是用python开发的通用进程(不仅仅是python进程)管理程序,其可以将普通的命令行进程转变为后台daemon(守护进程),监控进程状态,当进程异常退出时可自动重启。注意!注意!后方高能报警中~~~====》Supervisor只能管理非daemon的进程,也就是说Supervisor不能管理守护进程。否则提示Exited too quickly ...

weixin_39658619的博客 437

SOEM主站开发篇(1):移植SOEM主站到Linux开发板

详细介绍了SOEM主站源码移植到Linux开发板上的步骤,同时演示了如何使用Linux开发板获取EtherCAT从站的PDO映射信息。

kevin1499的博客 2399

linux 守护进程:PM2、systemd、Forever、Daemontools、supervisor

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。

freeking101的博客 7608

如何解决Dify重新部署(升级到最新版)后出现的Setup failed: PermissionDenied等问题

重新部署(升级)Dify后遇到Permission denied错误?🚫 本文详细分析了这个问题的原因🔐,并提供了完整的解决步骤来修复这个问题✨

XiaoqiangClub的博客 1656

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux中守护进程管理方式

本文介绍了3中linux系统中常用的守护进程的管理工具:nohup、supervirsor和start-stop-daemon。

鲜少伟的博客 1437

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

用Supervisor实现进程守护,在异常退出时自动重启

程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响。 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只能在服务失效后才能察觉到。必须采用一个进程守护来时刻保证zimg进程挂掉后,再自动重新启动。本篇介绍Supervisor工具来进行Zimg进程的守护。 Su...

anmishi2025的博客 477

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

轻松使用supervisor管理服务进程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

weixin_44449055的博客 1万+

linux 启动进程工具,Linux 进程管理工具:supervisor

原标题:Linux 进程管理工具:supervisor supervisor简介在Linux服务器中,有时候我们需要一个进程需要可靠的在后台运行,并且能够监控进程状态,在意外结束时能够自动重启等。此时就可以使用supervisor。supervisor 是使用Python开发的一套通用的进程管理程序,能够将一个普通的命令行进程变成后台的守护进程,并且监控进程的状态,异常退出时能够自动重启。安装su...

weixin_39684454的博客 209

supervisor 守护php,Supervisor 管理后台守护进程

自己开发的应用往往也希望做到随系统自动启动, 而且启动之后最好还能方便的控制其停止/重启. 传统的做法是在/etc/init.d/下建立启动脚本, 但这个方法非常繁琐, 容易出错, 而且不同服务器/不同版本的配置又有差异.通常需要借助一些辅助工具. 常用的管理工具有runit,daemontools以及用 Python 开发的Supervisor. 其中以 Supervisor 最为易...

weixin_39816027的博客 263

Supervisor-守护进程工具

一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为superviso

xhzth70911的博客 426
上一篇: MQ的使用场景
下一篇: nginx使用gzip压缩技术
神秘书生
博客等级 码龄8年 9粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值