看完这篇!教你三分钟学会Java项目主机启停脚本运用!

SpringBoot 打可执行生产包 SpringBoot 自带模块可单独打包成可运行的jar,对于拥有整套微服务框架的企业来说是非常友好的,只需要一个配置中心,完美解决不同环境不同配置的问题,但对于只使用SpringBoot的企业来说,需要配置跟着环境走,所以百度各方资料,整理出相关配置项,让你的SpringBoot 应用可以各目录分离 执行打包命令: mvn clean package 在当前target目录... 阅读详情

在这里插入图片描述](https://img-blog.csdnimg.cn/2ed603270b314f18912764429d6861c2.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbGlsYWhfamF2YQ==,size_16,color_FFFFFF,t_70#pic_center)

Java项目主机启停脚本示例

启动脚本


示例脚本如下:

# 定义变量
JAVA_HOME=/usr/local/java/jdk1.8.0_301
LOG_HOME=/app/iacctapp/applog/rd-cbn
JVM_ARGS="-XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -Xms1024m -Xmx1024m"

# 启动项目 
nohup ${JAVA_HOME}/bin/java ${JVM_ARGS} -Dloader.path=.,lib,classes -Dacctmgr.ms.instid=funddmdbcbn -jar acctmgr-boot.jar --server.port=32210 >${LOG_HOME}/consoleDmdbFund.log 2>&1 &

# 查看日志 
tail -f ${LOG_HOME}/consoleDmdbFund.log

定义变量
  • JAVA_HOME:jdk安装目录
  • LOG_HOME:程序日志输出目录
  • JVM_ARGS:jvm启动参数
启动项目
  • nohup :不挂断地运行命令。语法:nohup Command [ Arg … ] [ & ]
  • & :在后台运行一般nohup 和&一起用 :nohup command &
  • -Dloader.path:jvm加载目录,有多个用逗号分隔
  • -Dacctmgr.ms.instid=funddmdbcbn:自定义,方便进程定位
  • –server.port:端口暴露
  • 2>&1:将标准错误输出重定向到标准输出(屏幕)
名称名称操作符Java中表示
标准输入(stdin)0< 或 <<System.in
标准输出(stdout)1>, >>, 1> 或 1>>System.out
标准错误输出(stderr)22> 或 2>>System.err

2>&1一般放在最后,标准错误输出和程序日志才会都写到日志文件中。如果不放到最后,文件中只会输入日志,而标准错误输出是输出到屏幕
linux命令三剑客可参考Linux命令三剑客

查看日志

tail -f:动态输出日志文件内容到屏幕中

停止脚本


示例脚本如下:

#!/bin/bash

# 查找对应进程并杀掉
ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | awk '{print $2}' | while read processId 
do
        echo "stop acctmgr process $processId."
        kill $processId
done

# 显示杀进程过程与结果 
waitTimes=0
while true
do
        let waitTimes++

        commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l`
        if [ ${commanderNum} -eq 0 ]; then
                echo "acctmgr process has been stopped."
                break;
        else
                echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..."
        fi

        sleep 1;
done

查找对应进程

ps -ef:用标准的格式显示进程

grep “Dacctmgr.ms.instid=fundcbn”:控制ps命令只输出Dacctmgr.ms.instid=fundcbn相关的进程

grep -v grep:过滤掉grep本身进程

awk ‘{print $2}’:每行以空格或分隔符切割,输出第3位(从0计起)

杀进程
while read processId 
do
        echo "stop acctmgr process $processId."
        kill $processId
done

将上面读到的进程杀掉,知道所有进程停止为止

显示杀进程过程与结果
while true
do
        let waitTimes++

        commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l`
        if [ ${commanderNum} -eq 0 ]; then
                echo "acctmgr process has been stopped."
                break;
        else
                echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..."
        fi

        sleep 1;
done

该段代码的作用是每隔一秒循环对应进程的扫描,如果的进程还存在对应进程,输出提示语句,直到进程不存在为止

分类: [Linux]
![在这里插入图片描述

Oracle Windows启停:四步验证法与自动化脚本 Oracle数据库在Windows平台上的启动与停止并非简单服务开关,而是一套涉及监听器、实例、数据库三层状态协同的严谨流程。其核心原理在于依赖顺序(监听器→实例→数据库)、动态注册机制及状态可验证性,技术价值体现在避免‘假启动’、保障数据一致性、支持多实例隔离与运维审计。典型应用场景包括开发环境快速启停、生产库安全维护、Docker容器化部署及DBA标准化操作。本文聚焦Windows下Oracle 11g至21c版本的可验证启停实践,深度融合监听器状态检查与数据库OPEN验证两大关键热词,提供命令级操作指 阅读详情

相关推荐

【kafka专栏】集群生产级安装之linux主机名与ip解析,花三分钟看完这篇文章你就懂了

安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**在没有域名服务器(DNS)的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址,否则就需要使用DNS服务程序来解决。2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?5、LVS、Nginx、HAproxy有什么区别?

m0_60721823的博客 881

java启动、停止脚本

java启动脚本,使用方便,可自行修改参数

weixin_45779793的博客 590

java 操作脚本启动服务

java 操作脚本命令 启停服务 linux的没有测 window测试可以用

java项目启动脚本和停止脚本

请根据您的项目需求对脚本进行自定义和扩展,例如处理停止失败、额外的清理操作等。您可以将上述脚本保存为一个以.sh为扩展名的文件(例如,start.sh),并在终端中运行。您可以将上述脚本保存为一个以.sh为扩展名的文件(例如,stop.sh),并在终端中运行。在脚本执行时,它将进入项目根目录,并使用指定的Java可执行文件启动Java项目。替换为您的项目的实际可执行jar文件名。替换为您的项目的实际可执行jar文件名。替换为您的Java项目的根目录路径,替换为您的Java项目的根目录路径,

SerendipityMorii的博客 1625

java项目启动脚本

这是一个java项目打包部署以后的启动脚本,配置了启动参数等

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 204

Java启动停止脚本-小白有手就行

Java启动停止脚本-小白有手就行

ChenJin_2的博客 586

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5061

三分钟极速体验:Java版人脸检测

检测照片中的人脸,用Java可以实现吗?当然可以,而且还很容易,咱们用三分钟来体验一下

程序员欣宸的博客 6219

(2)NPW(监控片)【中】---业务场景精讲

自己在日常工作当中,由于非产线人员出生,对NPW的知识一直一知半解,业务场景认识的不够透彻,做系统的时候很难理解甲方的NPW业务应用,特收集了不少关于NPW的一些业务场景,下面都是一些摘抄,大家关注我标红标粗的部分,

阿拉伯梳子的专栏 1591

【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)

在游戏发展史上,有些游戏以其简单而耐玩的特性,深深地烙印在了玩家的记忆中。《黄金矿工》就是其中之一,它曾经在4399等游戏平台上掀起了一股游戏热潮。这款游戏不仅给无数玩家带来了欢乐,还让他们体验到了挖掘金矿的刺激与乐趣。在这个项目中,我们将花费半天的时间,利用Unity引擎,重新打造这款经典小游戏。通过复刻《黄金矿工》,我们不仅是在向童年的回忆致敬,更是在挖掘游戏设计的精髓。在这个过程中,我们将学习如何实现游戏的核心玩法,设计简洁而有效的游戏机制。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2904

三分钟学会一个新技能——使用Java操作Redis

我们之前学习Redis命令时,直接在Linux服务器中所提供的redis客户端上使用的,也就是说Redis服务器和客户端在同一台主机上。而现在我们使用Java去操作Redis,一般Java开发都是在Windows上,也就是在自己的电脑上的,就会导致一个问题,客户端和服务器不在同一台主机上。这种情况下,切记可不敢去云服务器上把这个端口开放哈!!!因为太容易被攻击了~这个情况,我们有两个解决办法~

LYJbao的博客 459

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

黑客零基础入门教程,从入门到精通学习路线&规划,看完这篇就够了。

黑客零基础入门教程,看完这篇就够了

kjuhfkicf154的博客 8963

3D点云-CVPR 2020-PF-Net: Point Fractal Network for 3D Point Cloud Completion

是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像素点与原来像素点比较完成模型的训练。而PF-Net就是采用GAN的思想在3D点云上的应用。

404 Not Found 2375

大厂面经:京东大数据面试题及参考答案(3万字长文)

Kafka是一个开源的分布式流处理平台,由 LinkedIn 开发并在 2011 年贡献给 Apache 软件基金会。高吞吐量:能够处理大量的数据流,适合实时数据管道。持久性:数据存储在磁盘上,确保数据不丢失。容错性:通过数据复制提供高可用性。扩展性:支持水平扩展,易于增加更多节点。Kafka 的核心概念Topic:逻辑上的数据流,可以理解为主题。Producer:生产数据的应用程序。Consumer:消费数据的应用程序。Broker:Kafka 集群中的服务器节点。Partition。

大模型大数据攻城狮的专栏 863

项目部署点一下按钮就可以,全流程自动化-三分钟学会真简单

我们平时在开发一些小项目的时候,有快速部署发布的这样的需求,我感觉最智能的方式可能是喊一声“发布”,应用程序就能自动打包发布到服务器上并运行起来。因为项目的规模比较小,我们可能不会应用到DevOps团队。我们希望有一个小工具,帮我们实现应用程序的快速上线。 Alibaba Cloud ToolKit就可以帮助我们就解决这个问题,但是我们还是得打一点小小的折扣,我们无法实现“喊一声”,但是我们可以实现“按一下”就发布应用程序。对于看文档感觉乏味的同学:点这里,这里有本文对应的操作《视频》。 第一步:安装I

wusj的博客 426

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Arbess+GitLab+SonarQube实战:Java项目自动化构建与主机部署全流程

CI/CD是DevOps实践的核心,通过自动化流水线将代码集成、质量检查与部署流程标准化,从而提升交付效率与稳定性。在具体落地中,GitLab作为代码托管与触发源,SonarQube提供静态代码分析与质量门禁,而Arbess则承担流水线编排,将编译、测试、扫描、打包及主机部署串联成可视化、可重试的自动化链路。这套组合解决了传统手工部署中人为失误多、质量无卡口、过程不可追溯等痛点,尤其适合Java项目在自有服务器上的持续交付场景。从环境搭建、流水线阶段划分到部署脚本设计,再到常见认证与仓库膨胀问题的排查,完整

weixin_33146151的博客 201

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

三分钟学会Sqoop安装与部署

注解:狗头.jpg 这里解压后的文件名还是原文件名,所以各位小白希望该名称的可以解压后改,这里特地做了一次错误示范,解压前只能改压缩包名称,不能控制解压后文件名称,这里可以再重命名一次。用户可以将数据从结构化存储器抽取到Hadoop中,用于进一步的处理,抽取的数据可以被mapreduce程序使用,也可以被其他类似与Hive、HBase的工具使用。另外,sqoop是关系型数据库与Hadoop的数据交互,故需要配置关系型数据库,这里选择MySQL作为示例。sqoop是一个开源工具,数据搬运工,

百老讲数据 2154
上一篇: 面试被问java线程状态,一脸茫然?莫慌!看完这篇 从容应对!
下一篇: 想要入门自学Java?先从必须学习的Maven基础知识开始吧!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值