• 关于

    用户列表和退出

    的搜索结果

问题

DMS中MongoDB的整体功能

DMS中MongoDB的整体功能如下图所示: 图中各区域的说明如下表所示: 编号区域名称功能说明1版本显示区鼠标上浮可显示当前版本更新记录和版本更新历史入口。2功能导航栏新建数据库/集合/用户、查询窗口等功能...
云栖大讲堂 2019-12-01 21:29:35 1104 浏览量 回答数 0

回答

在云服务器 ECS Linux 系统中,通常我们在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开 SSH 连接或关闭客户端软件,否则可能会导致执行中断。本文介绍几种保障程序在用户退出登录后持续运行的方法。 使用管理终端执行 通过 管理终端 会登录服务器的本地会话(console)口,在该终端执行的程序不会受到 SSH 登录用户退出的影响。具体操作方式如下: 通过 管理终端 登录服务器。 执行所需程序或脚本。 下次需要查看任务执行状态时,再次连接管理终端查看即可。 使用 nohup 执行 nohup 的作用顾名思义,它使得后面的命令不会响应挂断(SIGHUP)信号。也就是说,通过远程登录执行 nohup 后,即使退出登录后,程序还是会正常执行。通常情况下,nohup 命令最后会跟上 & 字符,表示将这个命令放至后台执行,这样才能真正做到将这个命令放至后台持续的执行。 操作示例: 1. 正常的执行命令为 bash hello.sh,执行结果为每秒输出一行的小程序: 在命令头尾分别加上 nohup 和 &,变为 nohup bash hello.sh &,可以看到 nohup 输出了一行信息,再按一下回车键就跳回了 shell 命令行,此时命令已经在后台执行了,nohup 将命令的输出重定向至当前目录的 nohup.out 文件中。同时注意到 nohup 会将对应程序的 PID 输出,PID 可用于需要中断进程时 kill 进程。 通过 tail -f nohup.out 可以持续的查看 nohup.out 的输出,达到监视程序的效果。 在命令中也可以使用重定向将程序的输出改为自己想要的文件名,如 nohup bash hello.sh >hello.log &,则程序的输出就会写到 hello.log 文件中。 若程序不会自动退出,那么此时需要使用 kill 命令来结束进程。比如,可以使用命令 kill -TRM 来操作,其中 PID 即为之前 nohup 输出的值,在此例中该值为 1231。 使用限制: nohup 通常用于执行无干预的自动化程序或脚本,无法完成带有交互的操作。 使用 screen 执行 安装 sceen 工具 Linux 系统默认未自带 screen 工具,需要先进行安装: CentOS 系列系统: yum install screen Ubuntu 系列系统: sudo apt-get install screen 使用简介 1. 创建 screen 窗口 screen -S name name可以设置为ssh、ftp,用于标注该 screen 窗口用途 示例: screen -S ftp 列出 screen 进程,并进入所需 screen screen -ls ##列出 screen 进程列表 如下图 然后进行所需操作,比如运行脚本、执行程序等等。 如下图示例:创建ftp连接后台下载传输文件 退出保存 前述 ftp 操作示例开始传输后,在窗口中键入Ctrl+a 键,再按下 d 键,就可以退出 SSH 登录,但不会影响 screen 程序的执行。 保存会话以便继续执行 可以利用 screen 这种功能来管理的远程会话。操作步骤概述: 正常 SSH 登录服务器 创建 screen 窗口 执行所需任务 需要临时中断退出时,按 Ctrl +d 保存退出 需要继续工作时,再次 SSH 登录服务器,然后直接执行 screen -r -d 恢复会话即可。
KB小秘书 2019-12-02 02:06:59 0 浏览量 回答数 0

问题

Linux运维人员最常用150个命令汇总

Linux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心&...
福利达人 2019-12-01 21:47:08 3342 浏览量 回答数 1

问题

如何登录和注销MongoDB管理控制台

在MongoDB中对实例的管理可以通过 MongoDB管理控制台进行。本章介绍如何登录和注销MongoDB管理控制台。 前提条件 在登录 MongoDB管理控制台前,您需要购买MongoDB实例,具体的购...
云栖大讲堂 2019-12-01 21:22:55 980 浏览量 回答数 0

回答

vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。 前提条件 已注册阿里云账号。如还未注册,请先完成账号注册。 已完成实名认证。如还未认证,请先完成实名认证。 已创建ECS实例并为实例分配了公网IP地址。若尚未创建,请参见创建ECS实例。 背景信息 FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式: 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。 说明 大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。因此,如无特殊需求,建议您将FTP服务器配置为被动模式。 FTP支持以下三种认证模式: 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。 本教程中介绍的FTP服务器配置方法如下表所示。 工作模式 匿名用户 本地用户 主动模式 主动模式下,开通匿名用户向FTP服务器上传文件权限的配置方法。 主动模式下,使用本地用户访问FTP服务器的配置方法。 被动模式 无。 被动模式下,使用本地用户访问FTP服务器的配置方法。 使用限制 本教程示例步骤使用以下资源版本: 实例规格:ecs.c6.large 操作系统:CentOS 7.2 64位 vsftpd:3.0.2 浏览器:Internet Explorer 11 当您使用不同软件版本时,可能需要根据实际情况调整命令和参数配置。 操作步骤 Linux实例搭建FTP站点具体步骤如下: 步骤一:安装vsftpd 步骤二:配置vsftpd(匿名用户模式) 步骤二:配置vsftpd(本地用户模式) 步骤三:设置安全组 步骤四:客户端测试 视频教程 步骤一:安装vsftpd 远程连接Linux实例。 连接方法,请参见连接方式介绍。 运行以下命令安装vsftpd。 yum install -y vsftpd 出现如下图所示界面时,表示安装成功。install_vsftp_successfully 运行以下命令设置FTP服务开机自启动。 systemctl enable vsftpd.service 运行以下命令启动FTP服务。 systemctl start vsftpd.service 运行以下命令查看FTP服务监听的端口。 netstat -antup | grep ftp 出现如下图所示界面,表示FTP服务已启动,监听的端口号为21。此时,vsftpd默认已开启匿名访问功能,您无需输入用户名密码即可登录FTP服务器,但没有修改或上传文件的权限。install_vsftpd_3 步骤二:配置vsftpd(匿名用户模式) 配置主动模式下匿名用户上传文件权限的操作步骤如下: 修改配置文件/etc/vsftpd/vsftpd.conf。 运行vim /etc/vsftpd/vsftpd.conf命令打开配置文件。 按i进入编辑模式。 将写权限修改为write_enable=YES。 将匿名上传权限修改为anon_upload_enable=YES。 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。 修改后的配置文件,如下图所示。匿名权限1 运行以下命令更改/var/ftp/pub目录的权限,为FTP用户添加写权限。 chmod o+w /var/ftp/pub/ 运行以下命令重新加载配置文件。 systemctl restart vsftpd.service 匿名权限2 步骤二:配置vsftpd(本地用户模式) 配置本地用户访问FTP服务器的操作步骤如下: 运行以下命令为FTP服务创建一个Linux用户。本示例中,该用户名为ftptest。 useradd ftptest 运行以下命令修改ftptest用户的密码。 passwd ftptest 运行以下命令创建一个供FTP服务使用的文件目录。 mkdir /var/ftp/test 运行以下命令更改/var/ftp/test目录的拥有者为ftptest。 chown -R ftptest:ftptest /var/ftp/test 修改vsftpd.conf配置文件。 运行vim /etc/vsftpd/vsftpd.conf命令打开配置文件。 按i进入编辑模式。 根据实际需要,配置FTP服务器为主动模式或被动模式。 注意 修改和添加配置文件内的信息时,请注意格式问题。例如,添加多余的空格会造成无法重启服务的结果。 配置FTP为主动模式的参数如下: #除下面提及的参数外,其他参数保持默认值即可。 #修改下列参数的值 anonymous_enable=NO #禁止匿名登录FTP服务器 local_enable=YES #允许本地用户登录FTP服务器 listen=YES #监听IPv4 sockets #在行首添加#注释掉以下参数 #listen_ipv6=YES #关闭监听IPv6 sockets #添加下列参数 chroot_local_user=YES #全部用户被限制在主目录 chroot_list_enable=YES #启用例外用户名单 chroot_list_file=/etc/vsftpd/chroot_list #指定例外用户列表文件,列表中的用户不被锁定在主目录 allow_writeable_chroot=YES local_root=/var/ftp/test #设置本地用户登录后所在的目录 配置FTP为被动模式的参数如下: #除下面提及的参数外,其他参数保持默认值即可。 #修改下列参数的值 anonymous_enable=NO #禁止匿名登录FTP服务器 local_enable=YES #允许本地用户登录FTP服务器 listen=YES #监听IPv4 sockets #在行首添加#注释掉以下参数 #listen_ipv6=YES #关闭监听IPv6 sockets #添加下列参数 local_root=/var/ftp/test #设置本地用户登录后所在目录 chroot_local_user=YES #全部用户被限制在主目录 chroot_list_enable=YES #启用例外用户名单 chroot_list_file=/etc/vsftpd/chroot_list #指定例外用户列表文件,列表中用户不被锁定在主目录 allow_writeable_chroot=YES pasv_enable=YES #开启被动模式 pasv_address=<FTP服务器公网IP地址> #本教程中为Linux实例公网IP pasv_min_port= #设置被动模式下,建立数据传输可使用的端口范围的最小值 pasv_max_port= #设置被动模式下,建立数据传输可使用的端口范围的最大值 说明 建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。 更多参数详情,请参见vsftp配置文件及参数说明。 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。 创建chroot_list文件,并在文件中写入例外用户名单。 运行vim /etc/vsftpd/chroot_list命令创建chroot_list文件。 按i进入编辑模式。 输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。 按Esc退出编辑模式,然后输入:wq并回车以保存并关闭文件。 说明 没有例外用户时,也必须创建chroot_list文件,内容可为空。 运行以下命令重启vsftpd服务。 systemctl restart vsftpd.service 步骤三:设置安全组 搭建好FTP站点后,在实例安全组的入方向添加规则并放行下列FTP端口。具体步骤,请参见添加安全组规则。 说明 大多数客户端位于局域网中,IP地址是经过转换的,因此ipconfig或ifconfig命令返回的IP不一定是客户端的真实公网IP地址。若后续客户端无法登录FTP服务器,请重新确认其公网IP地址。 FTP为主动模式时:端口21。配置详情如下表所示。 规则方向 授权策略 协议类型 端口范围 授权类型 授权对象 入方向 允许 自定义TCP 21/21 IPv4地址段访问 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。 允许所有客户端访问时,授权对象为0.0.0.0/0。 FTP为被动模式时:端口21,以及配置文件/etc/vsftpd/vsftpd.conf中参数pasv_min_port和pasv_max_port之间的所有端口。配置详情如下表所示。 规则方向 授权策略 协议类型 端口范围 授权类型 授权对象 入方向 允许 自定义TCP 21/21 IPv4地址段访问 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。 允许所有客户端访问时,授权对象为0.0.0.0/0。 入方向 允许 自定义TCP pasv_min_port/pasv_max_port IPv4地址段访问 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。 允许所有客户端访问时,授权对象为0.0.0.0/0。 步骤四:客户端测试 FTP客户端、Windows命令行工具或浏览器均可用来测试FTP服务器。本教程以Windows自带的IE浏览器为例,分别介绍FTP服务器配置为主动模式或被动模式时的访问步骤。 说明 使用浏览器访问FTP服务器出错时,建议您清除浏览器缓存后再尝试。 FTP服务器为主动模式 打开客户端的IE浏览器。 将浏览器设置为主动访问模式。选择设置 > Internet 选项 > 高级。选中启用 FTP 文件夹视图,取消勾选使用被动 FTP。 在地址栏中输入ftp://<FTP服务器公网IP地址>:FTP端口,本教程中为Linux实例的公网IP地址。例如:ftp://39.0.0.1:21。 在弹出的对话框中,输入用户名和密码,即可对FTP文件进行相应权限的操作。 说明 此步骤仅适用于本地用户,匿名用户无需输入用户名和密码即可登录FTP服务器。 FTP服务器为被动模式 打开客户端的IE浏览器。 将浏览器设置为被动访问模式。选择设置 > Internet 选项 > 高级。选中启用FTP文件夹视图和使用被动FTP。 在地址栏中输入ftp://<FTP服务器公网IP地址>:FTP端口,本教程中为Linux实例的公网IP地址。例如:ftp://39.10.0.28:21。 在弹出的对话框中,输入用户名和密码,即可对FTP文件进行相应权限的操作。 说明 此步骤仅适用于本地用户,匿名用户无需输入用户名和密码即可登录FTP服务器。 vsftp配置文件及参数说明 /etc/vsftpd目录下文件说明如下: /etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。 /etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问FTP服务器。 /etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问FTP服务器。 配置文件vsftpd.conf参数说明如下: 用户登录控制参数说明如下表所示。 参数 说明 anonymous_enable=YES 接受匿名用户 no_anon_password=YES 匿名用户login时不询问口令 anon_root=(none) 匿名用户主目录 local_enable=YES 接受本地用户 local_root=(none) 本地用户主目录 用户权限控制参数说明如下表所示。 参数 说明 write_enable=YES 可以上传文件(全局控制) local_umask=022 本地用户上传的文件权限 file_open_mode=0666 上传文件的权限配合umask使用 anon_upload_enable=NO 匿名用户可以上传文件 anon_mkdir_write_enable=NO 匿名用户可以建目录 anon_other_write_enable=NO 匿名用户修改删除 chown_username=lightwiter 匿名上传文件所属用户名 后续步骤 对FTP服务进行安全加固。具体操作,请参见安全加固方案。
1934890530796658 2020-03-26 00:27:07 0 浏览量 回答数 0

问题

分享自己写的一个管理FTP的脚本

手里管着好几台服务器,经常添加修改FTP,特别麻烦(我不喜欢那些什么一键包或者面板什么的,用不上的东西太多,也占资源,我喜欢用什么装什么,用不...
daidaidai 2019-12-01 21:24:26 11653 浏览量 回答数 8

回答

如果 Flink 应用不能正常启动达到 RUNNING 状态,可以按以下步骤进行排查: 1. 需要先检查应用当前状态,根据上述对启动流程的说明,我们知道: ○ 处于 NEW_SAVING 状态时正在进行应用信息持久化,如果持续处于这个 状态我们需要检查 RM 状态存储服务(通常是 ZooKeeper 集群)是否正常; ○ 如果处于 SUBMITTED 状态,可能是 RM 内部发生一些 hold 读写锁的耗 时操作导致事件堆积,需要根据 YARN 集群日志进一步定位; ○ 如果处于 ACCEPTED 状态,需要先检查 AM 是否正常,跳转到步骤 2; ○ 如果已经是 RUNNING 状态,但是资源没有全部拿到导致 JOB 无法正常 运行,跳转到步骤 3; 2. 检查 AM 是否正常,可以从 YARN 应用展示界面(http:///cluster/app/)或 YARN 应用 REST API(http:///ws/v1/cluster/apps/)查看 diagnostics 信 息,根据关键字信息明确问题原因与解决方案: ○ Queue’s AM resource limit exceeded. 原因是达到了队列 AM 可用资 源上限,即队列的 AM 已使用资源和 AM 新申请资源之和超出了队列的 AM 资源上限,可以适当调整队列 AM 可用资源百分比的配置项:yarn. scheduler.capacity..maximum-am-resource-percent。 ○ User’s AM resource limit exceeded. 原因是达到了应用所属用户在该队 列的 AM 可用资源上限,即应用所属用户在该队列的 AM 已使用资源和 AM 新申请资源之和超出了应用所属用户在该队列的 AM 资源上限,可以适当 提高用户可用 AM 资源比例来解决该问题,相关配置项:yarn.scheduler. capacity..user-limit-factor 与 yarn.scheduler.capacity..minimum-user-limit-percent。 ○ AM container is launched, waiting for AM container to Register with RM. 大致原因是 AM 已启动,但内部初始化未完成,可能有 ZK 连接超时等 问题,具体原因需排查 AM 日志,根据具体问题来解决。 ○ Application is Activated, waiting for resources to be assigned for AM. 该信息表示应用 AM 检查已经通过,正在等待调度器分配,此时需要进行调 度器层面的资源检查,跳转到步骤 4。 3. 确认应用确实有 YARN 未能满足的资源请求:从应用列表页点击问题应用 ID 进入应用页面,再点击下方列表的应用实例 ID 进入应用实例页面,看 Total Outstanding Resource Requests 列表中是否有 Pending 资源,如 果没有,说明 YARN 已分配完毕,退出该检查流程,转去检查 AM;如果 有,说明调度器未能完成分配,跳转到步骤 4; 4. 调度器分配问题排查,YARN-9050 支持在 WebUI 上或通过 REST API 自 动诊断应用问题,将在 Hadoop3.3.0 发布,之前的版本仍需进行人工排查: ○ 检查集群或 queue 资源,scheduler 页面树状图叶子队列展开查看资源信 息:Effective Max Resource、Used Resources:(1)检查集群资源或所 在队列资源或其父队列资源是否已用完;(2)检查叶子队列某维度资源是否 接近或达到上限; ○ 检查是否存在资源碎片:(1)检查集群 Used 资源和 Reserved 资源之和占 总资源的比例,当集群资源接近用满时(例如 90% 以上),可能存在资源碎 片的情况,应用的分配速度就会受影响变慢,因为大部分机器都没有资源 了,机器可用资源不足会被 reserve,reserved 资源达到一定规模后可能 导致大部分机器资源被锁定,后续分配可能就会变慢;(2)检查 NM 可用资 源分布情况,即使集群资源使用率不高,也有可能是因为各维度资源分布不 同造成,例如 1/2 节点上的内存资源接近用满 CPU 资源剩余较多,1/2 节 点上的 CPU 资源接近用满内存资源剩余较多,申请资源中某一维度资源值 配置过大也可能造成无法申请到资源; ○ 检查是否有高优先级的问题应用频繁申请并立即释放资源的问题,这种情况 会造成调度器忙于满足这一个应用的资源请求而无暇顾及其他应用; ○ 检查是否存在 Container 启动失败或刚启动就自动退出的情况,可以查看 Container 日志 ( 包括 localize 日志、launch 日志等 )、YARN NM 日志或 YARN RM 日志进行排查。
Lee_tianbai 2020-12-30 16:42:33 0 浏览量 回答数 0

问题

java 进销存 crm websocket即时聊天发图片文字 好友群组 SSM源码

fhadmin框架 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java ...
游客ydre72cd7ywew 2019-12-01 19:53:21 40 浏览量 回答数 0

问题

设计功能和界面测试用例

文本框的测试   如何对文本框进行测试   a,输入正常的字母或数字。   b,输入已存在的文件的名称;   c,输入超长字符。例如在“名称”框中输入超过允许边界个数的字符,假设最多255个字符...
技术小菜鸟 2019-12-01 21:06:08 2874 浏览量 回答数 1

问题

设计功能和界面测试用例

  1.1 文本框、按钮等控件测试   1.1.1 文本框的测试   如何对文本框进行测试   a,输入正常的字母或数字。   b,输入已存在的文件的名称;   c,输入超长字符。例如在“名称”框中输入超过允许...
技术小菜鸟 2019-12-01 21:40:51 2443 浏览量 回答数 1

问题

Java SDK下载

JDK 1.6 及以上 最新开发包下载(内含Demo程序) Java SDK 开发包 v0.2.2 Maven中央库依赖配置<dependency>    <groupId>...
云栖大讲堂 2019-12-01 21:10:43 1660 浏览量 回答数 0

问题

更新系统时如何避免升级 Linux 系统内核

注意:阿里云不建议随意自行升级内核,参阅 ECS 使用须知。 本文简要说明了更新系统软件时,如何避免升级系统内核,涉及的系统有 CentOS,Debianÿ...
boxti 2019-12-01 22:02:27 1630 浏览量 回答数 0

问题

如何安装日志采集器

日志采集器简介 在 EDAS 提供的一系列服务中,很多数据都是从本地机器拉取的,这就要求服务器可以连接到对应的机器上。 阿里云的网络环境分为经典网络和 VPC 网络两种。在经典网络中,如果防火墙...
猫饭先生 2019-12-01 21:03:13 676 浏览量 回答数 0

回答

其实官网介绍 Ghost Blog 的安装过程已经够详细了,我在这里也是面向小白讲的更清楚一点,然后有一两个坑提一下 官网的安装教程可以在这里看到:https://docs.ghost.org/setup/ 官网推荐的操作系统是 Ubuntu,那么服务器系统也就最好用 Ubuntu,其实这一点倒是没啥问题,Ubuntu 的兼容性也挺不错的,毕竟我之前用 CentOS 切过来也没啥问题。 开始之前还有一点要注意,如果你现在是一台新装过系统的服务器,又想装宝塔这种管理工具,请先安装,不然安装完Ghost后会无法安装。 下面阐述步骤: 由于原版安装 Ghost 的指令不可以由 root 用户完成,所以首先要新建一个账号: adduser 这里将 (包括尖括号)替换成你想起的名字。不过注意不可以将“ghost”作为新账户的名称,这会与后面的 Ghost-CLI 冲突 之后会让你输入两遍密码,然后会让你输入全名、号码等信息,这些都不用管,直接回车就行。直到它显示 Is the information correct? [Y/n] 输入y,回车便完成新用户的创建 提升刚才新用户的操作权限,默认新用户是无法执行 sudo 命令的,所以通过下面这句提升权限。注意替换用户名。 usermod -aG sudo 登陆刚才创建的用户 su 更新系统的软件包列表和已安装的软件包 sudo apt-get update sudo apt-get upgrade 第一次执行时会让你输入密码 安装Nginx sudo apt-get install nginx 中间有个确认,选择y 修改防火墙策略,允许 Nginx 的流量 sudo ufw allow 'Nginx Full' 安装 MySQL sudo apt-get install mysql-server 出现确认选择y 配置 MySQL 首先进入 MySQL 控制台 sudo mysql 设置数据库密码,密码要记清楚了 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 这里要把 password 替换成你想的密码,但是要保留单引号。用户名这里不要改成你刚才创建的用户名,就保留 root 然后退出 MySQL 控制台 quit 这里官网教程中要我们再次登陆刚才创建的用户,不过我觉得好像没必要,不过还是操作一下 su 要输入一下密码 安装 Node.js 添加仓库 curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash 注意这里就用官网提供的这个地址,保证是受 Ghost 支持的版本 安装 sudo apt-get install -y nodejs 这一步可能会比较慢,因为上面为了保证版本内容相同,我们没有使用国内镜像 安装 Ghost-CLI,它可以让我们执行 ghost 相关的命令,比如安装卸载这种 sudo npm install ghost-cli@latest -g 为 Ghost 创建目录,这里你可以自己定,也可以像我一样按照官方的来 首先创建目录 sudo mkdir -p /var/www/ghost 然后给权限,这里的 替换为刚刚新创建的用户名 sudo chown : /var/www/ghost 定位到刚刚创建的文件夹中 cd /var/www/ghost 执行安装命令 ghost install 这里有可能会卡在 Downloading and installing Ghost 这里,如果是卡在 Downloading 或者 Fetching packages,那就是服务器网不好,过一会他会自己重试;如果卡在 Building fresh packages 长达二十分钟多,那就是安装卡住了,需要按Ctrl+C退出安装,然后执行 ghost uninstall 卸载,再重新安装一半就好了。万一这里这里卸载也报错,那就先返回到上一层目录 cd .. 然后删除 ghost 文件夹 sudo rm -rf ghost 然后从第12步重新安装 如果安装正常进行的话,就会让你自定义一些信息。 Enter your blog URL: (http://localhost:2368) 这里如果你想弄https,就不要输入http://,直接输入域名就可以 Enter your MySQL hostname: (localhost) 这里直接回车 Enter your MySQL username: 输入 root,不要输入其他账号 Enter your MySQL password: 输入刚才设置的密码 Enter your Ghost database name: 直接回车,默认为ghost_prod Do you wish to set up "ghost" mysql user? yes Do you wish to set up Nginx? yes Do you wish to set up SSL? 选择yes即代表使用https,推荐使用 Enter your email (For SSL Certificate) 输入一个能用的邮箱 Do you wish to set up Systemd? yes Do you want to start Ghost? yes 之后就能启动了 打开你的域名/ghost,便可以打开管理员页面进行进一步设置
保持可爱mmm 2020-04-15 23:26:49 0 浏览量 回答数 0

回答

首先你得先有一个云服务器,有了云服务器之后,就可以将项目部署上去了。 步骤: 第一步.租服务器 1.阿里云官网注册一个阿里云账号https://www.aliyun.com/ 2.租一台云服务器.PS:.阿里云活动页面可领取6个月免费服务器,可选择9.9套餐免争抢.购买后需回到活动页面领取服务器. 服务器选择系统建议CentOS7.2 第二步.下载所需工具 1.jdk+tomcat+Xshell5+Xftp5 个人提供文件http://pan.baidu.com/s/1jHG2AUy 第三步.安装Xshell5+Xftp5 1.直接运行软件安装 第四步.Xshell5登陆服务器,Xftp5上传文件到服务器 新建>主机框填服务器公网IP>确定>连接>用户名默认填root>密码填配置服务器时填的密码>Xshell5登陆成功 PS:公网IP可登陆阿里云管理控制太查看,如果你忘记或者未设置你的密码可进入ECS控制台-实例列表-重置密码。重置密码成功后需要重启服务器。 窗口>传输新建文件>再次输入密码进行确认>Xftp5连接成功 用Xftp5,在usr文件夹下创建目录/usr/tomcat和/usr/java/jdk,并上传文件到各自的路径下. 第五步.安装JDK环境 Xshell5里输入cd /usr/java/jdk和tar -zxvf jdk-8u144-linux-x64.tar.gz 解压成功后,开始配置环境变量输入 vi /etc/profile 然后回车直到显示 然后按i键开始编辑,在空白处插入 export JAVA_HOME=/usr/java/jdk/jdk1.8.0_144 export JRE_HOME=/usr/java/jdk/jdk1.8.0_144/jre export CLASSPATH=.:$JAVA_HOME/lib$:JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin/$JAVA_HOME:$PATH ESC 退出编辑输入:wq回车保存文本 输入指令source /etc/profile 然后java -version 验证是否配置成功, **第六步.安装tomcat ** 输入指令 cd /usr/tomcat tar -zxvf apache-tomcat-9.0.1.tar.gz 进入解压后文件夹 cd    /usr/tomcat/apache-tomcat-9.0.1/bin 编辑setclasspath.sh 脚本,指令如下:操作同上  vi setclasspath.sh 添加 export JAVA_HOME=/usr/java/jdk/jdk1.8.0_144 export JRE_HOME=/usr/java/jdk/jdk1.8.0_144/jre :wq 保存退出 ./startup.sh开启tomcat 为了能够访问还需要阿里云添加安全组规则 阿里云>管理控制台>云服务器ECE>安全组>配置规则>添加安全组规则 ok,现在就可以通过http://公网IP:8080来访问了
剑曼红尘 2020-03-26 11:35:06 0 浏览量 回答数 0

问题

如何应对不明需求做好测试

       在日常需求的测试过程中,因为时间和资源的相对紧张,往往会遇到PRD不够细致,而UC描述也过于简单的情况,这个时候会让经验不够丰富的测试人员有种无从入手的感觉。其实由于思考...
技术小菜鸟 2019-12-01 21:39:07 3352 浏览量 回答数 1

问题

揭秘知名网站如何收集个人数据及应对措施

你有没有想过社交网络网站为何对你和你的偏好了如指掌?像Facebook和LinkedIn这些社交媒体网站经常会收集用户众多数据,拿来与广告商共享,向用户投放更有针对性的广告。面对这些问题,您并非完全...
虎笑 2019-12-01 20:54:09 10230 浏览量 回答数 2

问题

Atlas 启动失败? 400 报错

Atlas 启动失败? 400 报错 [root@proxy mysql-proxy]# ./bin/mysql-proxyd test start error: failed to start MySQL-Proxy of te...
爱吃鱼的程序员 2020-06-01 14:31:42 0 浏览量 回答数 1

回答

分析原因一:Mysql的自动备份功能可能导致数据库在备份的时候先关闭服务,而在此启动的时候服务器不响应, 开始-运行-services.msc,打开windows服务找到mysql的服务并双击,点击恢复选项卡,第一次失败:默认是“不操作”,改成”重新启动服务”。 在下方的“重新启动服务:分钟后”添上“0”表示如果服务意外终止则立即重启动。点击确定使设置生效。这时候你在任务管理器里结束mysql-nt进程,会发现结束不掉,不过要注意,这样mysql.exe是停不了的,如果要停必须把刚才修改的改回来.) 分析原因二,可能是mysql连接问题 修改mysql的最大连接数, 使用内存变量修改法修改mysql的最大连接数 步骤如下(同时适用windows和linux平台): a、客户端登录mysql,输入用户名和密码’b、在mysql命令提示符下设置新的最大连接数为500:mysql> set global max_connections=500 c、显示当前运行的query:mysql> show processlist d、显示当前mysql 系统参数状态:mysql> show status# k; e、退出客户端:mysql> exit’ 查看当前最大连接数只需要通过在mysqladmin所在目录下执行以下命令:mysqladmin -username -password variables |find “max_con” 即可看到。也可以使用php教程myadmin里头的mysql参数列表查看最大连接数。 缺点:重启计算机或者mysql后最大连接数又会复位成初始值,需要重新设定。 2、修改my.ini或my.cnf文件法(需要重启mysql),可参考同目录下mysql的配置模板(小内存、大内存、超大内存). e  windows系统下打开my.ini文件找到set-variable =max_connections=100这一行,改成需要设定的最大连接数,然后重启即可。 linux控制台下: 1、打开my.cnf文件:vi /etc/my.cnf 2 在[mysqld]段下修改max_connections的值为设定值。 注意: 可能大家安装的mysql来源和版本不同(windows下mysql+iis和php+apache+mysql套件最终安装结果几乎都不相同),my.ini文件的路径可能有些不同,my.ini可能还会保留一份在c:windows目录下需要同时修改 答案来源于网络
养狐狸的猫 2019-12-02 02:14:04 0 浏览量 回答数 0

问题

系统默认安装的vsftp的简单配置教程

有点麻烦哈!不会的直接用xftp可以管理所有的文件夹,把vsftpd关了就行! VSFTPD的文件结构主要包括:   /usr/sbin/vsftpd ---- VSFT...
mxf851x 2019-12-01 20:28:28 12219 浏览量 回答数 2

问题

运维人员处理云服务器故障方法七七云转载

我们团队为Ucloud云计算服务提供专家技术支持,每天都要碰到无数的用户故障,毕竟IAAS涉及比较底层的东西,不管设计的是大客户也好还是小客户,有了问题就必须要解决,也要要是再赶上修复时间紧、奇葩的技术平台、缺少信息和文档,基...
杨经理 2019-12-01 22:03:10 9677 浏览量 回答数 2

问题

【算法】五分钟算法小知识:Linux的进程、线程、文件描述符是什么?

说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。 Linux 中的进程其实就是一个数据结构,顺...
游客ih62co2qqq5ww 2020-05-09 11:28:57 0 浏览量 回答数 0

问题

【云计算的1024种玩法】为小伙伴搭建一个功能丰富的百度贴吧云签到

前言 贴吧是年轻人比较喜欢逛得地方,和云栖社区一样贴吧也有个签到功能,不过云栖社区只有一个地方要签到,但是要是你泡的贴吧多了那签到就麻烦多了而且还容易忘记。这时候传说中的百度贴吧云签到就非常...
妙正灰 2019-12-01 21:14:47 3112 浏览量 回答数 5

问题

springboot windows10风格 shiro 安全框 activiti 整合项目框架源

为Springboot工作流版本 windows 风格, 浏览器访问操作使用,非桌面应用程序 1.代码生成器: (单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代...
游客q6uipubrszn5g 2019-12-01 19:56:32 18 浏览量 回答数 0

问题

springboot windows10风格 activiti 整合项目框架源码 shiro 安全框

为Springboot工作流版本 windows 风格, 浏览器访问操作使用,非桌面应用程序 1.代码生成器: (单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代...
游客egqjd4t7mlyom 2019-12-01 19:54:38 72 浏览量 回答数 1

问题

springboot windows10风格 activiti 整合项目框架源码 shiro 安全框

为Springboot工作流版本 windows 风格, 浏览器访问操作使用,非桌面应用程序 1.代码生成器: (单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代码不...
游客ydre72cd7ywew 2019-12-01 19:52:06 39 浏览量 回答数 0

回答

定义 定义 描述 ContainerGroup 容器组 ImageRegistryCredential 镜像仓库登录信息 Volume 数据卷 Event 事件 Tag 容器标签 DNSConfig DNS配置信息 Container 容器 ContainerState 容器状态 VolumeMount 数据卷挂载点 EnvironmentVar 容器环境变量 ContainerPort 容器端口 SecurityContext 实例运行的安全上下文 ReadinessProbe Readiness探针 LivenessProbe Liveness探针 ContainerGroup 名称 类型 描述 RegionId String 实例所属的地域 ID ZoneId String 实例所属的可用区编号,空表示由系统选择,默认值:空 SecurityGroupId String 指定新创建实例所属于的安全组代码,同一个安全组内的实例之间可以互相访问 VSwitchId String 指定虚拟交换机 ID。当前 ECI 实例均为 VPC 实例 ContainerGroupName String 容器组名称 ContainerGroupId String 容器组 ID ImageRegistryCredentials ImageRegistryCredential[] 镜像仓库登陆信息,上限10 Volumes Volume[] 数据卷信息,上限20 RestartPolicy String 重启策略 (Always,OnFailure,Never) Cpu Float 容器组级别Cpu限制,单位:核 vCPU Memory Float 容器组级别内存限制,单位:GiB InitContainers Container[] 初始化容器列表,上限5 Containers Container[] 容器列表,上限5 Events Event[] 事件信息,上限 50 DNSConfig DNSConfig DNS配置信息 InternetIp String 公网 IP IntranetIP String 内网 IP Tags Tag[] 实例的标签键值对,上限20 Status String 返回容器组创建状态,枚举值:Pending,Running,Succeeded,Failed,Scheduling, ScheduleFailed CreationTime String 接到请求后的系统创建时间。UTC时间,RFC3339标准,例如:2018-08-02T15:00:00Z SucceededTime String 容器全部成功退出后的时间。UTC时间,RFC3339标准,例如:2018-08-02T15:00:00Z EniInstanceId String ENI 实例 ID ExpiredTime String 容器由于帐户欠费导致eci运行失败的时间。UTC时间,RFC3339标准,例如:2018-08-02T15:00:00Z FailedTime String 容器执行失败的时间。UTC时间,RFC3339标准,例如:2018-08-02T15:00:00Z ImageRegistryCredential 名称 类型 是否必须 描述 Server String 是 不带 ‘http://‘ 或 ‘https://‘ 前缀的镜像仓库地址 UserName String 是 镜像仓库用户名 Password String 是 镜像仓库密码 Volume 名称 类型 是否必须 描述 Type String 是 数据卷类型,可选值为:EmptyDirVolume、NFSVolume、ConfigFileVolume三种 Name String 是 数据卷名称 NFSVolume.Server String 否 NFS 服务器地址 NFSVolume.Path String 否 NFS 数据卷路径 NFSVolume.ReadOnly Boolean 否 默认值为 False ConfigFileVolume.ConfigFileToPath ConfigFileToPath[] 否 配置文件路径 EmptyDirVolume.Medium String 否 EmptyDirVolume的存储媒介,默认为空,使用node文件系统;支持 Memory,表示使用内存 ConfigFileToPath 名称 类型 是否必须 描述 Path String 是 相对文件路径 Content String 否 配置文件内容 (32KB) Event 仅作为返回参数 名称 类型 描述 Count Integer 事件计数 FirstTimestamp String 事件起始时间 LastTimestamp String 事件结束时间 Message String 事件消息 Name String 事件的归属对象名 Type String 事件类型,枚举值: Normal,Warning Reason String 事件名 Tag 名称 类型 是否必须 描述 Key String 是 关键字 Value String 否 数值 DNSConfig https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-config 名称 类型 描述 Nameservers String[] DNS 服务器 IP 地址列表 Searches String[] DNS 搜索域列表 Options Option[] 对象选项列表,每个对象由name和value(可选)构成 Option 名称 类型 描述 Name String 对象 name Value String 对象 value Container 名称 类型 是否必须 描述 Commands String[] 否 容器启动命令,上限20,单个String,256个字符 Args String[] 否 容器启动参数,上限10 EnvironmentVars EnvironmentVar[] 否 容器内操作系统的环境变量(Key:Value对,String),上限100。Key 是变量名,Value 是变量值 。 Image String 是 镜像 Name String 是 容器名 Cpu Float 是 CPU,单位:核 Memory Float 是 内存,单位:GiB ImagePullPolicy String 否 镜像拉取策略 VolumeMounts VolumeMount[] 否 数据卷挂载信息,上限16 CurrentState ContainerState 否 当前状态 PreviousState ContainerState 否 上一次状态 RestartCount Integer 否 重启次数 WorkingDir String 否 容器工作目录 Ports Port[] 否 暴露端口+协议,上限100 LivenessProbe LivenessProbe 否 存活探针 ReadinessProbe ReadinessProbe 否 就绪探针 SecurityContext SecurityContext 否 实例运行的安全上下文,更多信息 ContainerState 仅作为返回参数 名称 类型 描述 StartTime Timestamp 容器运行开始时间 State String 容器状态,枚举值:Waiting,Running,Terminated DetailStatus String 状态详情 FinishTime Timestamp 容器运行结束时间 ExitCode Integer 容器运行退出码 Reason String 容器状态 Reason Message String 容器状态信息 Signal Integer 容器状态信号 VolumeMount 名称 类型 是否必须 描述 Name String 是 数据卷名称,同 Volume 中的 Name MountPath String 是 挂载目录,容器的挂载目录下的内容被volume的内容直接覆盖,所以要慎用 ReadOnly Boolean 是 默认值为 False EnvironmentVar 名称 类型 是否必须 描述 Key String 是 变量名,长度[1,128],取值范围:[0-9a-zA-Z]以及下划线 ‘_’,不能以数字开头 Value String 否 变量值,长度[0,256],取值范围不限 FieldRef.FieldPath String 否 变量值引用,目前只支持”status.podIP” Port 名称 类型 描述 Port Integer 端口号 1-65535 Protocol String TCP/UDP SecurityContext 名称 类型 描述 Capability Capability cpu/memory RunAsUser Int ReadOnlyRootFilesystem Bool 目前仅支持:True Capability 名称 类型 描述 Adds String[] 枚举值,目前仅支持:NET_ADMIN ReadinessProbe 名称 类型 描述 ReadinessProbe.HttpGet.Path String HttpGet检测的路径 ReadinessProbe.HttpGet.Port Integer HttpGet检测的端口号 ReadinessProbe.HttpGet.Scheme String HTTP/HTTPS ReadinessProbe.Exec.Commands String[] 容器内检测的命令 ReadinessProbe.TcpSocket.Port Integer TcpSocket检测的端口 注:Exec、HttpGet 和 TcpSocket 三选一 ReadinessProbe.InitialDelaySeconds Integer 检查开始执行的时间,以容器启动完成为起点计算 ReadinessProbe.PeriodSeconds Integer 检查执行的周期,默认为10秒,最小为1秒 ReadinessProbe.SuccessThreshold Integer 从上次检查失败后重新认定检查成功的检查次数阈值(必须是连续成功),默认为1。 ReadinessProbe.FailureThreshold Integer 从上次检查成功后认定检查失败的检查次数阈值(必须是连续失败),默认为3 ReadinessProbe.TimeoutSeconds Integer 检查超时的时间,默认为1秒,最小为1秒 LivenessProbe 名称 类型 描述 LivenessProbe.HttpGet.Path String HttpGet检测的路径 LivenessProbe.HttpGet.Port Integer HttpGet检测的端口号 LivenessProbe.HttpGet.Scheme String HTTP/HTTPS LivenessProbe.Exec.Commands String[] 容器内检测的命令 LivenessProbe.TcpSocket.Port Integer TcpSocket检测的端口 LivenessProbe.InitialDelaySeconds Integer 检查开始执行的时间,以容器启动完成为起点计算 LivenessProbe.PeriodSeconds Integer 检查执行的周期,默认为10秒,最小为1秒 LivenessProbe.SuccessThreshold Integer 从上次检查失败后重新认定检查成功的检查次数阈值(必须是连续成功),默认为1。当前必须为1 LivenessProbe.FailureThreshold Integer 从上次检查成功后认定检查失败的检查次数阈值(必须是连续失败),默认为3 LivenessProbe.TimeoutSeconds Integer 检查超时的时间,默认为1秒,最小为1秒
1934890530796658 2020-03-20 19:18:38 0 浏览量 回答数 0

回答

一 系统介绍 Android 是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。 围绕在Google的Android系统中,形成了移植开发和上层应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,上层的应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android在技术上的优势主要有以下几点: - 全开放智能手机平台 - 多硬件平台的支持 - 使用众多的标准化技术 - 核心技术完整,统一 - 完善的SDK和文档 - 完善的辅助开发工具 Android的开发者可以在完备的开发环境中进行开发,Android的官方网站也提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的生态环境中。 https://developer.android.com/about安卓开发者官方网站 从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源代码。从下至上,Android系统分成4个层次: 第1层次:Linux操作系统及驱动; 第2层次:本地代码(C/C++)框架; 第3层次:Java框架; 第4层次:Java应用程序。 Android系统的架构如图所示: 由于Android系统需要支持Java代码的运行,这部分内容是Android的运行环境(Runtime),由虚拟机和Java基本类组成。 对于Android应用程序的开发,主要关注第3层次和第4层次之间的接口。 二 学习路线 基础学习——JavaSE: 基础学习扩展——JavaEE: 基础学习扩展——Linux基础: Android开发学习——基础理论:系统架构分析: Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 Linux 内核是硬件和软件层之间的抽象层。 中间件 中间件包括两部分: 核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。 Dalvik虚拟机: 区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。 应用程序框架(Application Framework) 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 三 基础知识 掌握java部分之后,可以使用开发工具进入android世界 您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。 每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护: • Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户; • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件; • 每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。 • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。 Android 系统实现了最小权限原则。换言之,默认情况下,每个应用只能访问执行其工作所需的组件,而不能访问其他组件。这样便能创建非常安全的环境,在此环境中,应用无法访问其未获得权限的系统部分。不过,应用仍可通过一些途径与其他应用共享数据以及访问系统服务: • 可以安排两个应用共享同一 Linux 用户 ID,在此情况下,二者便能访问彼此的文件。为节省系统资源,也可安排拥有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM。应用还必须使用相同的证书进行签名。 • 应用可以请求访问设备数据(如用户的联系人、短信消息、可装载存储装置(SD 卡)、相机、蓝牙等)的权限。用户必须明确授予这些权限。如需了解详细信息,请参阅使用系统权限。 本文档的其余部分将介绍以下概念: • 用于定义应用的核心框架组件 • 用来声明组件和应用必需设备功能的清单文件。 • 与应用代码分离并允许应用针对各种设备配置适当优化其行为的资源。 应用组件 应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。 共有四种不同的应用组件类型: • Activity • 服务 • 广播接收器 • 内容提供程序 每种类型都有不同的用途和生命周期,后者会定义如何创建和销毁组件。以下部分将介绍应用组件的四种类型。 Activity Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。Activity 有助于完成系统和应用程序之间的以下重要交互: • 追踪用户当前关心的内容(屏幕上显示的内容),以确保系统继续运行托管 Activity 的进程。 • 了解先前使用的进程包含用户可能返回的内容(已停止的 Activity),从而更优先保留这些进程。 • 帮助应用处理终止其进程的情况,以便用户可以返回已恢复其先前状态的 Activity。 • 提供一种途径,让应用实现彼此之间的用户流,并让系统协调这些用户流。(此处最经典的示例是共享。) 您需将 Activity 作为 Activity 类的子类来实现。如需了解有关 Activity 类的更多信息,请参阅 Activity 开发者指南。 服务 服务是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务不提供界面。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。诸如 Activity 等其他组件可以启动服务,使该服务运行或绑定到该服务,以便与其进行交互。事实上,有两种截然不同的语义服务可以告知系统如何管理应用:已启动服务会告知系统使其运行至工作完毕。此类工作可以是在后台同步一些数据,或者在用户离开应用后继续播放音乐。在后台同步数据或播放音乐也代表了两种不同类型的已启动服务,而这些服务可以修改系统处理它们的方式: • 音乐播放是用户可直接感知的服务,因此,应用会向用户发送通知,表明其希望成为前台,从而告诉系统此消息;在此情况下,系统明白它应尽全力维持该服务进程运行,因为进程消失会令用户感到不快。 • 通常,用户不会意识到常规后台服务正处于运行状态,因此系统可以更自由地管理其进程。如果系统需要使用 RAM 来处理用户更迫切关注的内容,则其可能允许终止服务(然后在稍后的某个时刻重启服务)。 绑定服务之所以能运行,原因是某些其他应用(或系统)已表示希望使用该服务。从根本上讲,这是为另一个进程提供 API 的服务。因此,系统会知晓这些进程之间存在依赖关系,所以如果进程 A 绑定到进程 B 中的服务,系统便知道自己需使进程 B(及其服务)为进程 A 保持运行状态。此外,如果进程 A 是用户关心的内容,系统随即也知道将进程 B 视为用户关心的内容。由于存在灵活性(无论好坏),服务已成为非常有用的构建块,并且可实现各种高级系统概念。动态壁纸、通知侦听器、屏幕保护程序、输入方法、无障碍功能服务以及众多其他核心系统功能均可构建为在其运行时由应用实现、系统绑定的服务。 您需将服务作为 Service 的子类来实现。如需了解有关 Service 类的更多信息,请参阅服务开发者指南。 注意:如果您的应用面向 Android 5.0(API 级别 21)或更高版本,请使用 JobScheduler 类来调度操作。JobScheduler 的优势在于,它能通过优化作业调度来降低功耗,以及使用 Doze API,从而达到省电目的。如需了解有关使用此类的更多信息,请参阅 JobScheduler 参考文档。 广播接收器 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。例如,应用可通过调度提醒来发布通知,以告知用户即将发生的事件。而且,通过将该提醒传递给应用的广播接收器,应用在提醒响起之前即无需继续运行。 许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管广播接收器不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。但广播接收器更常见的用途只是作为通向其他组件的通道,旨在执行极少量的工作。例如,它可能会根据带 JobScheduler 的事件调度 JobService 来执行某项工作 广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。如需了解详细信息,请参阅 BroadcastReceiver 类。 内容提供程序 内容提供程序管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何拥有适当权限的应用均可查询内容提供程序(如 ContactsContract.Data),以读取和写入特定人员的相关信息。我们很容易将内容提供程序看作数据库上的抽象,因为其内置的大量 API 和支持时常适用于这一情况。但从系统设计的角度看,二者的核心目的不同。对系统而言,内容提供程序是应用的入口点,用于发布由 URI 架构识别的已命名数据项。因此,应用可以决定如何将其包含的数据映射到 URI 命名空间,进而将这些 URI 分发给其他实体。反之,这些实体也可使用分发的 URI 来访问数据。在管理应用的过程中,系统可以执行以下特殊操作: • 分配 URI 无需应用保持运行状态,因此 URI 可在其所属的应用退出后继续保留。当系统必须从相应的 URI 检索应用数据时,系统只需确保所属应用仍处于运行状态。 • 这些 URI 还会提供重要的细粒度安全模型。例如,应用可将其所拥有图像的 URI 放到剪贴板上,但将其内容提供程序锁定,以便其他应用程序无法随意访问它。当第二个应用尝试访问剪贴板上的 URI 时,系统可允许该应用通过临时的 URI 授权来访问数据,这样便只能访问 URI 后面的数据,而非第二个应用中的其他任何内容。 内容提供程序也适用于读取和写入您的应用不共享的私有数据。 内容提供程序作为 ContentProvider 的子类实现,并且其必须实现一组标准 API,以便其他应用能够执行事务。如需了解详细信息,请参阅内容提供程序开发者指南。 Android 系统设计的独特之处在于,任何应用都可启动其他应用的组件。例如,当您想让用户使用设备相机拍摄照片时,另一个应用可能也可执行该操作,因而您的应用便可使用该应用,而非自行产生一个 Activity 来拍摄照片。您无需加入甚至链接到该相机应用的代码。只需启动拍摄照片的相机应用中的 Activity 即可。完成拍摄时,系统甚至会将照片返回您的应用,以便您使用。对用户而言,这就如同相机是您应用的一部分。 当系统启动某个组件时,它会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。例如,如果您的应用启动相机应用中拍摄照片的 Activity,则该 Activity 会在属于相机应用的进程(而非您的应用进程)中运行。因此,与大多数其他系统上的应用不同,Android 应用并没有单个入口点(即没有 main() 函数)。 由于系统在单独的进程中运行每个应用,且其文件权限会限制对其他应用的访问,因此您的应用无法直接启动其他应用中的组件,但 Android 系统可以。如要启动其他应用中的组件,请向系统传递一条消息,说明启动特定组件的 Intent。系统随后便会为您启动该组件。 启动组件 在四种组件类型中,有三种(Activity、服务和广播接收器)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。 您需使用 Intent 对象创建 Intent,该对象通过定义消息来启动特定组件(显式 Intent)或特定的组件类型(隐式 Intent)。 对于 Activity 和服务,Intent 会定义要执行的操作(例如,查看或发送某内容),并且可指定待操作数据的 URI,以及正在启动的组件可能需要了解的信息。例如,Intent 可能会传达对 Activity 的请求,以便显示图像或打开网页。在某些情况下,您可以通过启动 Activity 来接收结果,这样 Activity 还会返回 Intent 中的结果。例如,您可以发出一个 Intent,让用户选取某位联系人并将其返回给您。返回 Intent 包含指向所选联系人的 URI。 对于广播接收器,Intent 只会定义待广播的通知。例如,指示设备电池电量不足的广播只包含指示“电池电量不足”的已知操作字符串。 与 Activity、服务和广播接收器不同,内容提供程序并非由 Intent 启动。相反,它们会在成为 ContentResolver 的请求目标时启动。内容解析程序会通过内容提供程序处理所有直接事务,因此通过提供程序执行事务的组件便无需执行事务,而是改为在 ContentResolver 对象上调用方法。这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。 每种组件都有不同的启动方法: • 如要启动 Activity,您可以向 startActivity() 或 startActivityForResult() 传递 Intent(当您想让 Activity 返回结果时),或者为其安排新任务。 • 在 Android 5.0(API 级别 21)及更高版本中,您可以使用 JobScheduler 类来调度操作。对于早期 Android 版本,您可以通过向 startService() 传递 Intent 来启动服务(或对执行中的服务下达新指令)。您也可通过向将 bindService() 传递 Intent 来绑定到该服务。 • 您可以通过向 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法传递 Intent 来发起广播。 • 您可以通过在 ContentResolver 上调用 query(),对内容提供程序执行查询。 如需了解有关 Intent 用法的详细信息,请参阅 Intent 和 Intent 过滤器文档。以下文档将为您详细介绍如何启动特定组件:Activity、服务、BroadcastReceiver 和内容提供程序。
问问小秘 2020-03-03 09:47:38 0 浏览量 回答数 0

问题

如何快速定位云主机的故障

作为一名从事Linux运维行业多年的运维人员,分享一下曾经在运维过程中遇到过的荆手的故障分析,供大家分享,如果你在使用云计算中有什么问题,可以根据以下方式来查找 遇到服务器故障,问题出现的原因很少可以一下就想到。我基本上都会从...
firstsko 2019-12-01 21:43:10 10637 浏览量 回答数 1

问题

Activiti 工作流项目源码 代码生成器 websocket即时通讯 springmvc SS

工作流模块 1.模型管理 :web在线流程设计器、预览流程xml、导出xml、部署流程 2.流程管理 :导入导出流程资源文件、查看流程图、根据流程实例反射出流程模型、激活挂起 3.运行中流程:...
游客egqjd4t7mlyom 2019-12-01 19:54:26 50 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询