debian12 - systemctl 根据状态值判断服务启动成功的依据

news2024/11/13 9:38:29

文章目录

    • debian12 - systemctl 根据状态值判断服务启动成功的依据
    • 概述
    • 笔记
    • 用配置好的原版debian12试试状态值。
    • 实验结论
    • END

debian12 - systemctl 根据状态值判断服务启动成功的依据

概述

和同学讨论问题,说到服务的运行状态。
拿ssh服务为例。
查询ssh服务状态

sudo systemctl status ssh

在这里插入图片描述
他认为,只有 active(running)的状态,才说明服务被正常启动了。
在这里插入图片描述

我认为,只要服务干活了,就说明服务被启动了。 e.g. 已经监听了端口,那服务没退,进程还在,就说明服务已经启动了。

笔记

systemctl在哪里?

lostspeed@debian12d4x64:~$ whereis systemctl
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz

用windterm连上ssh, 拷贝出来
在这里插入图片描述

弄出来用IDA看看。
在这里插入图片描述
从这2个参考点开始看。
疑似第一个参考点更靠谱。
在这里插入图片描述
现在对着IDA和源码比对一下。
systemctl是systemd中的一个程序。
systemd 源码在 https://github.com/systemd/systemd.git
迁出后的systemctl工程源码位置 = D:\3rd_prj\linux\systemd\src\systemctl
将D:\3rd_prj\linux\systemd\src\systemctl作为一个SI工程,查找 “Active: %s%s (%s)%s”
看到在 D:\3rd_prj\linux\systemd\src\systemctl\systemctl-show.c 中实现的, 函数为 print_status_info()。
在这里插入图片描述
虽然不能单步调试,但是顺着逻辑看一下,也能学到些东西。
调用链

show_one(bus, p, u->id, show_mode, new_line, ellipsized);
print_status_info()

在这里插入图片描述
从打印这块看不出Active状态哪个不是正常运行的状态。
要显示的服务状态信息都是调用 bus_map_all_properties()取的。
看一下 bus_map_all_properties(), 看了,看不到填状态的地方,都是从map中取值/赋值。

到此,简单的从systemctl源码看,并不知道active(XX)中的XX状态字符串,哪种不是服务正常启动的状态。
那只能去看systemctl的命令行帮助了。

man systemctl

从帮助可知,直接查看systemctl的所有状态值。
在这里插入图片描述

systemctl --state=help > systemctl_help.txt
Available unit load states:
stub
loaded
not-found
bad-setting
error
merged
masked

Available unit active states:
active
reloading
inactive
failed
activating
deactivating
maintenance

Available unit file states:
enabled
enabled-runtime
linked
linked-runtime
alias
masked
masked-runtime
static
disabled
indirect
generated
transient
bad

Available automount unit substates:
dead
waiting
running
failed

Available device unit substates:
dead
tentative
plugged

Available mount unit substates:
dead
mounting
mounting-done
mounted
remounting
unmounting
remounting-sigterm
remounting-sigkill
unmounting-sigterm
unmounting-sigkill
failed
cleaning

Available path unit substates:
dead
waiting
running
failed

Available scope unit substates:
dead
start-chown
running
abandoned
stop-sigterm
stop-sigkill
failed

Available service unit substates:
dead
condition
start-pre
start
start-post
running
exited
reload
stop
stop-watchdog
stop-sigterm
stop-sigkill
stop-post
final-watchdog
final-sigterm
final-sigkill
failed
auto-restart
cleaning

Available slice unit substates:
dead
active

Available socket unit substates:
dead
start-pre
start-chown
start-post
listening
running
stop-pre
stop-pre-sigterm
stop-pre-sigkill
stop-post
final-sigterm
final-sigkill
failed
cleaning

Available swap unit substates:
dead
activating
activating-done
active
deactivating
deactivating-sigterm
deactivating-sigkill
failed
cleaning

Available target unit substates:
dead
active

Available timer unit substates:
dead
waiting
running
elapsed
failed

可以看到,在running之前,还有一个start状态。
start状态说明服务已经启动了
running状态说明服务正在运行

在这里插入图片描述
如果服务已经启动了,但是还没有正常运行,这不也是说明服务在正常干活么?

在看systemctl帮助时,看到一些可以确定服务状态的命令。试试。
将环境切到我正常实验的openssl3.2 + openssh9.6P1的快照。

lostspeed@debian12d4x64:~$ openssl --version
OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)

lostspeed@debian12d4x64:~$ ssh -V
OpenSSH_9.6p1, OpenSSL 3.2.0 23 Nov 2023


在这里插入图片描述
此时查看ssh服务状态为 activating(start).
用windterm按照ssh方式连接虚拟机中的debian12
在这里插入图片描述
连接正常。连接后,可以正常执行命令。
这不就说明ssh服务是正常的么? 这还用看服务激活状态是activating(start) , 还是 activating(runninng)么?

查看ssh服务是否处于激活状态?

lostspeed@debian12d4x64:~$ systemctl is-active ssh
activating

这不就是说ssh服务是激活的么? 这还用看activating(runninng)么?

查看ssh服务是否失败?

lostspeed@debian12d4x64:~$ systemctl is-failed ssh
activating

服务还是激活的。
再显示ssh服务所有信息到文件看看。

systemctl show ssh > show_ssh.txt

show_ssh.txt内容如下:

Type=notify
ExitType=main
Restart=on-failure
NotifyAccess=main
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
TimeoutAbortUSec=1min 30s
TimeoutStartFailureMode=terminate
TimeoutStopFailureMode=terminate
RuntimeMaxUSec=infinity
RuntimeRandomizedExtraUSec=0
WatchdogUSec=0
WatchdogTimestampMonotonic=0
RootDirectoryStartOnly=no
RemainAfterExit=no
GuessMainPID=yes
RestartPreventExitStatus=255
MainPID=2253
ControlPID=0
FileDescriptorStoreMax=0
NFileDescriptorStore=0
StatusErrno=0
Result=success
ReloadResult=success
CleanResult=success
UID=[not set]
GID=[not set]
NRestarts=9
OOMPolicy=stop
ExecMainStartTimestamp=Mon 2024-08-26 14:22:17 CST
ExecMainStartTimestampMonotonic=819044146
ExecMainExitTimestampMonotonic=0
ExecMainPID=2253
ExecMainCode=0
ExecMainStatus=0
ExecStartPre={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -t ; ignore_errors=no ; start_time=[Mon 2024-08-26 14:22:16 CST] ; stop_time=[Mon 2024-08-26 14:22:17 CST] ; pid=2252 ; code=exited ; status=0 }
ExecStartPreEx={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -t ; flags= ; start_time=[Mon 2024-08-26 14:22:16 CST] ; stop_time=[Mon 2024-08-26 14:22:17 CST] ; pid=2252 ; code=exited ; status=0 }
ExecStart={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -D $SSHD_OPTS ; ignore_errors=no ; start_time=[Mon 2024-08-26 14:22:17 CST] ; stop_time=[n/a] ; pid=2253 ; code=(null) ; status=0/0 }
ExecStartEx={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -D $SSHD_OPTS ; flags= ; start_time=[Mon 2024-08-26 14:22:17 CST] ; stop_time=[n/a] ; pid=2253 ; code=(null) ; status=0/0 }
ExecReload={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -t ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
ExecReload={ path=/bin/kill ; argv[]=/bin/kill -HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
ExecReloadEx={ path=/usr/sbin/sshd ; argv[]=/usr/sbin/sshd -t ; flags= ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
ExecReloadEx={ path=/bin/kill ; argv[]=/bin/kill -HUP $MAINPID ; flags= ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
Slice=system.slice
ControlGroup=/system.slice/ssh.service
ControlGroupId=6878
MemoryCurrent=5660672
MemoryAvailable=infinity
CPUUsageNSec=19314000
TasksCurrent=5
IPIngressBytes=[no data]
IPIngressPackets=[no data]
IPEgressBytes=[no data]
IPEgressPackets=[no data]
IOReadBytes=18446744073709551615
IOReadOperations=18446744073709551615
IOWriteBytes=18446744073709551615
IOWriteOperations=18446744073709551615
Delegate=no
CPUAccounting=yes
CPUWeight=[not set]
StartupCPUWeight=[not set]
CPUShares=[not set]
StartupCPUShares=[not set]
CPUQuotaPerSecUSec=infinity
CPUQuotaPeriodUSec=infinity
IOAccounting=no
IOWeight=[not set]
StartupIOWeight=[not set]
BlockIOAccounting=no
BlockIOWeight=[not set]
StartupBlockIOWeight=[not set]
MemoryAccounting=yes
DefaultMemoryLow=0
DefaultMemoryMin=0
MemoryMin=0
MemoryLow=0
MemoryHigh=infinity
MemoryMax=infinity
MemorySwapMax=infinity
MemoryLimit=infinity
DevicePolicy=auto
TasksAccounting=yes
TasksMax=2244
IPAccounting=no
ManagedOOMSwap=auto
ManagedOOMMemoryPressure=auto
ManagedOOMMemoryPressureLimit=0
ManagedOOMPreference=none
EnvironmentFiles=/etc/default/ssh (ignore_errors=yes)
UMask=0022
LimitCPU=infinity
LimitCPUSoft=infinity
LimitFSIZE=infinity
LimitFSIZESoft=infinity
LimitDATA=infinity
LimitDATASoft=infinity
LimitSTACK=infinity
LimitSTACKSoft=8388608
LimitCORE=infinity
LimitCORESoft=0
LimitRSS=infinity
LimitRSSSoft=infinity
LimitNOFILE=524288
LimitNOFILESoft=1024
LimitAS=infinity
LimitASSoft=infinity
LimitNPROC=7480
LimitNPROCSoft=7480
LimitMEMLOCK=8388608
LimitMEMLOCKSoft=8388608
LimitLOCKS=infinity
LimitLOCKSSoft=infinity
LimitSIGPENDING=7480
LimitSIGPENDINGSoft=7480
LimitMSGQUEUE=819200
LimitMSGQUEUESoft=819200
LimitNICE=0
LimitNICESoft=0
LimitRTPRIO=0
LimitRTPRIOSoft=0
LimitRTTIME=infinity
LimitRTTIMESoft=infinity
OOMScoreAdjust=0
CoredumpFilter=0x33
Nice=0
IOSchedulingClass=2
IOSchedulingPriority=4
CPUSchedulingPolicy=0
CPUSchedulingPriority=0
CPUAffinityFromNUMA=no
NUMAPolicy=n/a
TimerSlackNSec=50000
CPUSchedulingResetOnFork=no
NonBlocking=no
StandardInput=null
StandardOutput=journal
StandardError=inherit
TTYReset=no
TTYVHangup=no
TTYVTDisallocate=no
SyslogPriority=30
SyslogLevelPrefix=yes
SyslogLevel=6
SyslogFacility=3
LogLevelMax=-1
LogRateLimitIntervalUSec=0
LogRateLimitBurst=0
SecureBits=0
CapabilityBoundingSet=cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend cap_audit_read cap_perfmon cap_bpf cap_checkpoint_restore
DynamicUser=no
RemoveIPC=no
PrivateTmp=no
PrivateDevices=no
ProtectClock=no
ProtectKernelTunables=no
ProtectKernelModules=no
ProtectKernelLogs=no
ProtectControlGroups=no
PrivateNetwork=no
PrivateUsers=no
PrivateMounts=no
PrivateIPC=no
ProtectHome=no
ProtectSystem=no
SameProcessGroup=no
UtmpMode=init
IgnoreSIGPIPE=yes
NoNewPrivileges=no
SystemCallErrorNumber=2147483646
LockPersonality=no
RuntimeDirectoryPreserve=no
RuntimeDirectoryMode=0755
RuntimeDirectory=sshd
StateDirectoryMode=0755
CacheDirectoryMode=0755
LogsDirectoryMode=0755
ConfigurationDirectoryMode=0755
TimeoutCleanUSec=infinity
MemoryDenyWriteExecute=no
RestrictRealtime=no
RestrictSUIDSGID=no
RestrictNamespaces=no
MountAPIVFS=no
KeyringMode=private
ProtectProc=default
ProcSubset=all
ProtectHostname=no
KillMode=process
KillSignal=15
RestartKillSignal=15
FinalKillSignal=9
SendSIGKILL=yes
SendSIGHUP=no
WatchdogSignal=6
Id=ssh.service
Names=ssh.service sshd.service
Requires=-.mount system.slice sysinit.target
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=systemd-journald.socket system.slice network.target sysinit.target basic.target auditd.service -.mount
RequiresMountsFor=/run/sshd
Documentation="man:sshd(8)" "man:sshd_config(5)"
Description=OpenBSD Secure Shell server
LoadState=loaded
ActiveState=activating
FreezerState=running
SubState=start
FragmentPath=/lib/systemd/system/ssh.service
UnitFileState=enabled
UnitFilePreset=enabled
StateChangeTimestamp=Mon 2024-08-26 14:22:17 CST
StateChangeTimestampMonotonic=819044198
InactiveExitTimestamp=Mon 2024-08-26 14:22:16 CST
InactiveExitTimestampMonotonic=819034304
ActiveEnterTimestampMonotonic=0
ActiveExitTimestampMonotonic=0
InactiveEnterTimestamp=Mon 2024-08-26 14:22:16 CST
InactiveEnterTimestampMonotonic=819022694
CanStart=yes
CanStop=yes
CanReload=yes
CanIsolate=no
CanClean=runtime
CanFreeze=yes
Job=2214
StopWhenUnneeded=no
RefuseManualStart=no
RefuseManualStop=no
AllowIsolate=no
DefaultDependencies=yes
OnSuccessJobMode=fail
OnFailureJobMode=replace
IgnoreOnIsolate=no
NeedDaemonReload=no
JobTimeoutUSec=infinity
JobRunningTimeoutUSec=infinity
JobTimeoutAction=none
ConditionResult=yes
AssertResult=yes
ConditionTimestamp=Mon 2024-08-26 14:22:16 CST
ConditionTimestampMonotonic=819023037
AssertTimestamp=Mon 2024-08-26 14:22:16 CST
AssertTimestampMonotonic=819023059
Transient=no
Perpetual=no
StartLimitIntervalUSec=10s
StartLimitBurst=5
StartLimitAction=none
FailureAction=none
SuccessAction=none
InvocationID=653b73dc30c34ada8459f319bc25710a
CollectMode=inactive

可以看到ssh状态为start, ssh的冻结状态为running
在这里插入图片描述
冻结状态好像是电源管理用的,保存的就是进程的最后状态。
冻结状态就代表的是进程的当前状态。
现在看到ssh的冻结状态为running,说明ssh服务就是正常运行的。

用配置好的原版debian12试试状态值。

切到配置好的原版快照。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

systemctl show ssh > show_ssh_org.txt

在这里插入图片描述
原版的冻结状态也是running
但是子状态为running

实验结论

从实际效果和show出的ssh状态可以看出,只要冻结状态为running, 就说明服务启动成功。
子状态是running 或者 start 都可以。

其实最终是要看效果,管它啥状态。(e.g. 对于ssh服务,只要用ssh方式能正常连上ssh服务,能正常执行linux命令,那就明显就是ssh服务已经正常启动并干活了,这就不需要再额外证明ssh服务状态查询时,显示的啥状态值才代表ssh服务启动正常)

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H7-TOOL脱机烧录的UID加密操作方法,支持一键生成目标板C代码,方便大家轻松操作(2024-08-20,已发布)

UID加密使用比较方便,对应的C代码模板已经做好,使用TOOL上位机生成后,直接复制粘贴到自己的工程即可使用。返回1表示解密成功,返回0表示失败。 【UID加密原理】 1、烧录器在烧录芯片时,按照指定的算法将UID码编码为…

Spring Core常见错误及解决方案

Spring Core常见错误及解决方案 一些Spring Core错误及解决方案,出自极客时间傅健老师《Spring编程常见错误50例》 https://time.geekbang.org/column/intro/100077001 Bean定义 隐式扫描不到Bean的定义 如果我们定义这样的目录结构,实际上访问对应接…

图书馆客流统计系统实时精准统计,管理者能及时了解馆内人数情况

在信息化时代,图书馆作为知识的宝库,其日常管理和服务水平直接影响着读者的体验和满意度。为了更好地管理图书馆的空间资源,并为读者提供更优质的阅读环境,许多图书馆开始引入先进的客流统计系统。 一、客流统计系统统计精准 1. 高…

线下参会报名丨智源数据与行业应用 Workshop 第二期

目前,大模型在数据基建和行业落地仍存在不少挑战。北京智源人工智能研究院深耕数据工具研发与数据平台建设,并持续推动模型与垂直场景的应用,旨在通过举办“数据与行业应用系列Workshop”活动,广泛链接生态伙伴,共同探…

NC设计LFU缓存结构

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 一个缓存结构…

基于pygame的雷电战机小游戏

import pygame import sys import random# 初始化 Pygame pygame.init()# 设置窗口尺寸 WIDTH, HEIGHT 800, 600 screen pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("雷电战机")# 设置颜色 BLACK (0, 0, 0) RED (255, 0, 0) GREEN (…

波束管理简介

波束管理简介 3GPP中,波束管理被定义为一组物理层或接入网高层的过程,用于获取和维护一组用于上行和下行传输或接收的gNB和UE波束。波束管理大致由:波束扫描,波束测量,波束判决,上报和指示,波束…

点亮星星的世界:当小孩得了自闭症该怎么办

在这个丰富多彩的世界里,每一个孩子都是独一无二的天使。然而,有一些孩子却仿佛被困在了自己的小小世界中,难以与外界正常交流和互动。他们是自闭症儿童,他们的世界充满了挑战和困惑,也让家长们陷入了深深的担忧和焦虑…

深入解析并发与并行:如何利用住宅代理加速网页抓取

引言 什么是并发执行?基本单位是什么? 什么是并行执行?和并发执行的区别是什么? 导致网页抓取缓慢的原因有哪些? 使用python进行网页抓取的并发性 并行性如何加速网页抓取 总结 引言 在当今数据驱动的世界中&am…

泛微Ecology9建模问题及解决办法记录(一)(按钮变灰、批量修改、导出、显示转换等)

1、为管理员和普通用户分别设置显示模版,其中普通用户的显示模版,“编辑‘’按钮置灰,不允许使用的方法 在用户显示模版页面中插入E9代码块如下: <script type="text/javascript"> /* * 请在下面编写JS代码 */ ModeForm.controlBtnDisabled(true); </…

“我王多鱼投了!”疯狂烧钱的AI大模型公司如何赚钱?

AI大模型到底有多烧钱&#xff1f; 或许最有发言权的就是OpenAI了&#xff0c;2022年其亏损大约翻了一番&#xff0c;达到约5.4亿美元。据悉&#xff0c;Altman曾私下建议&#xff0c;OpenAI可能会在未来几年尝试筹集多达1000亿美元的资金&#xff0c;以实现其开发足够先进的通…

Thinkphp6 反序列化漏洞分析

本文来自无问社区&#xff0c;更多实战内容可前往查看http://wwlib.cn/index.php/artread/artid/10431.html 版本&#xff1a;Thinkphp6&PHP7.3.4 TP 环境搭建利用 composer 命令进行&#xff0c;同时本次分析在 windows 环境下进行 composer create-project topthink/t…

佰朔资本:上市有什么好处?为什么有公司不愿上市?

公司上市或许带来的长处有&#xff1a; 1、融资途径拓宽。上市为公司供给了更广大的融资途径&#xff0c;通过发行股票公司可以敏捷筹集到大量资金&#xff0c;用于扩大生产规模、研制新产品、拓宽商场等。与银行贷款、发行债券等传统融资方法比较&#xff0c;上市融资不仅本钱…

【目标检测】YOLOV1

You Only Look Once: Unified, Real-Time Object Detection 1、核心思想 将整张图片作为网络的输入&#xff0c;直接在输出层对 BBox 的位置和类别进行回归。 Resize image&#xff1a;将输入图片resize到448x448。Run ConvNet&#xff1a;使用CNN提取特征&#xff0c;FC层输出…

Python神经网络在基因组学中的应用

在基因组学研究中&#xff0c;神经网络作为一种强大的工具&#xff0c;被广泛应用于基因型和表型之间的关联分析。通过构建神经网络模型&#xff0c;我们可以更好地理解遗传变异是如何影响个体的性状表现。本文将详细介绍如何使用Python实现这一过程&#xff0c;利用已知群体的…

一文读懂大语言模型:基础概念篇

在当今AI时代&#xff0c;大语言模型正以前所未有的速度重塑我们的世界。作为NLP领域的明星&#xff0c;它们不仅理解语言&#xff0c;更创造语言&#xff0c;开启了智能交互的新纪元。 本文将介绍着重介绍大模型的概念&#xff0c;帮助大家简单了解其技术原理、发展历程&#…

C++学习笔记----5、重用之设计(二)---- 为最优化重用结构化你的代码(1)

一定要在所有的层面在设计的一开始就考虑重用&#xff0c;也就是说&#xff0c;从一个独立的函数到一个类&#xff0c;直到整个库与框架。我们以后就把这些统称为部件。下面的策略会帮助你正确地组织代码。记住所有的这些策略关注的是你的代码的的通用目的。设计可重用代码第二…

2024上半年营业收入同比增长17%,一图看懂亚信安全2024半年报

2024上半年营业收入同比增长17%&#xff0c;贯彻健康经营&#xff0c;业绩企稳向好&#xff01; 云网安筑基 AI智绘未来 | 一图看懂亚信安全2024半年报

SAP DRC 交易与报表合规化

交易与报表合规化- SAP Document and Reporting Compliance(DRC) SAP DRC通过嵌入到端到端业务流程的源系统中的国家和地区特定内容&#xff0c;保证全球处理合规&#xff1b;利用统一的解决方案管理全球电子发票和法定报表&#xff0c;从而优化合规性&#xff0c;提高效率并提…

无线麦克风什么牌子最好,无线直播麦克风十大名牌推荐

​在数字化飞速发展的今天&#xff0c;无线领夹麦克风已经成为自媒体创作者、直播主播和专业录音师的重要工具。它们不仅小巧便携、操作简便&#xff0c;还具有出色的录音质量&#xff0c;极大地提升了音频录制的效率和质量。无论是户外探险的Vlog拍摄&#xff0c;还是室内直播…