存档11月 2019

Eureka 使用及常用配置

  1. ### Eureka server 注册中心
增加依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
在主启动类使用注解
@EnableEurekaServer
配制--服务端同时也是客户端
# 应用名
spring:
  application:
    name: eurekaserver
#  freemarker:
#    prefer-file-system-access: false
# 服务端口
server:
  port: 8761
eureka:
  #  instance:
  #    以IP:端口方式定位
  #    prefer-ip-address: true
  #    eureka.instance.instance-id: 主机名:应用名:端口号
  #    eureka主机名
  #    hostname: 127.0.0.1
  # 关闭注册中心的自我保护模式,开发环境可以关闭
  server:
    enable-self-preservation: false
  client:
    #    是否从eureka获取注册信息
    fetch-registry: false
    #   是否注册到eureka(eureka本身是不需要再注册到自己的)(单机环境)
    register-with-eureka: false
    service-url:
      #      设置注册服务器地址,开发测试时注册一个,上线服务器多台服务器,两台相互注册,三台两两相互注册 /eureka/
      defaultZone: http://localhost:8761/eureka
  1. ### Eureka client 服务注册
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
主启动类开启eureka客户端
@EnableDiscoveryClient
配制
eureka:
  client:
    #    是否从eureka获取注册信息
    fetch-registry: true
    # 是否注册到eureka(eureka本身是不需要再注册到自己的)(单机环境)
    register-with-eureka: true
    service-url:
      # 设置注册服务器地址,开发测试时注册一个,上线服务器多台服务器
      defaultZone: http://client:8761/eureka/
 #  instance:
  #    以IP:端口方式定位
  #    prefer-ip-address: true
  #    eureka.instance.instance-id: 主机名:应用名:端口号
  #    eureka主机名
  #    hostname: 127.0.0.1

常用配置说明:

配置参数 默认值 说明
服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean
eureka.server.enable-self-preservation false 关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭服务注册中心将不可用的实例正确剔除
服务实例类配置 Bean类:org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
eureka.instance.prefer-ip-address false 不使用主机名来定义注册中心的地址,而使用IP地址的形式,如果设置了

eureka.instance.ip-address 属性,则使用该属性配置的IP,否则自动获取除环路IP外的第一个IP地址

eureka.instance.ip-address IP地址
eureka.instance.hostname 设置当前实例的主机名称
eureka.instance.appname 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown
eureka.instance.lease-renewal-interval-in-seconds 30 定义服务续约任务(心跳)的调用间隔,单位:秒
eureka.instance.lease-expiration-duration-in-seconds 90 定义服务失效的时间,单位:秒
eureka.instance.status-page-url-path /info 状态页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置
eureka.instance.status-page-url 状态页面的URL,绝对路径
eureka.instance.health-check-url-path /health 健康检查页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置
eureka.instance.health-check-url 健康检查页面的URL,绝对路径
服务注册类配置 Bean类:org.springframework.cloud.netflix.eureka.EurekaClientConfigBean
eureka.client.service-url. 指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;默认的Value为 http://localhost:8761/eureka ,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。

如果服务注册中心加入了安全验证,这里配置的地址格式为: http://:@localhost:8761/eureka 其中 为安全校验的用户名; 为该用户的密码

eureka.client.fetch-registery true 检索服务
eureka.client.registery-fetch-interval-seconds 30 从Eureka服务器端获取注册信息的间隔时间,单位:秒
eureka.client.register-with-eureka true 启动服务注册
eureka.client.eureka-server-connect-timeout-seconds 5 连接 Eureka Server 的超时时间,单位:秒
eureka.client.eureka-server-read-timeout-seconds 8 读取 Eureka Server 信息的超时时间,单位:秒
eureka.client.filter-only-up-instances true 获取实例时是否过滤,只保留UP状态的实例
eureka.client.eureka-connection-idle-timeout-seconds 30 Eureka 服务端连接空闲关闭时间,单位:秒
eureka.client.eureka-server-total-connections 200 从Eureka 客户端到所有Eureka服务端的连接总数
eureka.client.eureka-server-total-connections-per-host 50 从Eureka客户端到每个Eureka服务主机的连接总数

https://www.cnblogs.com/li3807/p/7282492.html

eureka-client无法启动com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient

解决思路:

“Unregistering application unknown with eureka with status DOWN”,eureka无法注册未知应用程序,导致停止。感觉应该是缺少容器,spring-boot-starter-web中含有tomcat。

解决方法:
在pom.xml中加入或者父pom.xml中加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

微服务框架

两大配方

网关 [Zuul] Spring Cloud Gateway

1:阿里系

Dubbo
Nacos Zookeeper
SpringBoot /SpringMVC
采用服务端发现
Sentinel流控
链路监控 Pinpoint

2:Spring Cloud

Spring Cloud Netflix Eureka 服务注册发现
SpringBoot
Ribbon 客户端负载均衡器 RestTemplate/feign / Zuul
Hystrix流控
链路监控 Spring Cloud Sleuth & Zipkin

Eureka线上环境至少两台相互注册,三台两两相互注册以达到高可用,采用客户端发现,REST异构时常用的Nodejs有eureka-js-client客户端.

服务注册与发现对比 AP

如果要求一致性,则选择zookeeper、Consul,如金融行业 CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
如果要求可用性,则Eureka,如电商系统 AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
Nacos:
Nacos是阿里开源的,Nacos 支持基于 DNS 和基于 RPC 的服务发现。在Spring Cloud中使用Nacos,只需要先下载 Nacos 并启动 Nacos server,Nacos只需要简单的配置就可以完成服务的注册发现。
Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

微服务可见性

Metrics 跟踪所有可以用数字来表示的信息内容,用于度量
Tracing 跟踪单次请求中发生了什么,用于优化,提优
Logging 跟踪零散的文字描述,用于日志

Prometheus 采取拉取数据
ELK解决方案 采集离合零散的信息的处理,索引等
LogStash 离散的日志收集,处理,过滤,格式转换
ElasticSearch 搜索引擎,进行索引,方便检索
Kibana 展示数据

消息中间

RabbitMQ 集成
Kafka
ActiveMQ

综合对比:

  1. ActiveMQ: 历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
  2. RabbitMq:
    它比kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka,在性能方面超过ActiveMQ。
  3. Kafka:
    Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性,Kafka的性能(吞吐量、tps)比RabbitMq要强,如果用来做大数据量的快速处理是比RabbitMq有优势的

综合使用

网关:[Zuul]
网关流控:spring-cloud-zuul-ratelimit
服务与配制: Nacos
身份认证:Spring Cloud OAuth2
消息中间:RabbitMQ Kafka
服务流控:Sentinel

Buffalo LS-WVL/E上安装git

所需工具

PuTTY.exe

acp_commander

一。改机root
1. 在盘位1装上一块全新硬盘(没分区的盘)。

2. 启动NAS,然后按下机器后面function,这会把机器还原为出厂设置并格式化硬盘(慎:这会清除硬盘上的所有数据,如果你的硬盘上有数据,要先备份)。过了几分钟,设置完成后NAS自动重启。打开浏览器,输入NAS的地址(默认是192.168.1.100),如果能打开设置界面,就表示NAS准备就绪了。

不能进入先需安装系统- NASNAVI
点击NASNAVI软件的REFRESH,刷新会提示找到带有EM字样的NAS图标,此时NAS会显示NAS获取到的IP,暂时还不能访问到NAS的页面。如果提示更改IP,请直接取消,因为NAS已经从路由器上获得了IP。确认IP为以前路由器分配的以后,进入下一步。

安装系统-上传系统进入解压好的固件目录内,运行LSUpdater.exe,上传(UPDATE)固件,稍等即可。此过程可能持续20分钟。直到提示升级成功。

安装系统-改LSUpdater.ini【可选,改了以后记得重新打开LSUPDATER.EXE】

  1. [Application]
  2. Title = BUFFALO LinkStation Series Updater Ver.1.70
  3. WaitReboot = 1200
  4. WaitFormat = 600
  5. WaitFileSend = 600
  6. WaitDiscover = 120
  7. [Target]
  8. ProductID = 0x00000011
  9. ProductID2 = 0x00000012
  10. ProductID3 = 0x00000013
  11. ProductID4 = 0x00000014
  12. ProductID5 = 0x00003006
  13. ProductID6 = 0x00003007
  14. ProductID7 = 0x00000015
  15. ProductID8 = 0x00000016
  16. ProductID9 = 0x00003008
  17. ProductID10 = 0x00004001
  18. ProductID11 = 0x00000017
  19. ProductID12 = 0x00000019
  20. ProductID13 = 0x00000020
  21. ProductID14 = 0x00003010
  22. Name = LinkStation
  23. [Flags]
  24. VersionCheck = 0
  25. NoFormatting = 0

复制代码

VersionCheck = 1————1表示检查版本、0表示不检查版本,0用于降级
NoFormatting = 1———–1表示不格式化硬盘、0表示格式化硬盘

3. 准备一台windows机器,关闭windows防火墙。安装jre,地址http://java.com/zh_CN/download/manual.jsp

4. 下载acp_commander.jar。打开windows命令行,切换到acp_commander.jar所在的目录,输入以下命令以测试机器能否破解

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “ls /”
注意-pw后的参数”password”是web设置界面admin用户的登录密码,默认就是password,如果成功的话就能看到输出的根目录列表了!

5. 把root密码改为123456,你也可以改成别的。

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “(echo sweetopen;echo sweetopen)|passwd”
6. 修改sshd设置以允许root用户登录

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “sed -i ‘s/PermitRootLogin no/PermitRootLogin yes/g’ /etc/sshd_config”
7. 修改sshd设置,关闭PAM

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “sed -i ‘s/UsePAM yes/UsePAM no/g’ /etc/sshd_config”
8. 重启ssh服务

java -jar acp_commander.jar -t 192.168.1.100 -ip 192.168.1.100 -pw password -c “/etc/init.d/sshd.sh restart”
现在你可以用ssh登录LS-WVL了。

(注:以上几条命令可能会出错,注意看屏幕输出。如果对还有什么疑问,可以参考这篇文章http://i.592.net/?post=360,或者google一下,网上有很多关于改机的文章。)

二。安装git软件
1. 用PuTTY登录LS-WVL/E(默认地址192.168.1.100),用户root,密码是你在第一部分的步骤5设置的。

2.输入以下命令:

mkdir /mnt/disk1/temp
cd /mnt/disk1/temp
wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/ls-mvkw-bootstrap_1.2-7_arm.xsh
sh ./ls-mvkw-bootstrap_1.2-7_arm.xsh

做了阵列的

mkdir /mnt/array1/tmp
cd /mnt/array1/tmp/
wget http://ipkg.nslu2-linux.org/feeds/optware/cs05q3armel/cross/stable/teraprov2-bootstrap_1.2-7_arm.xsh
sh ./teraprov2-bootstrap_1.2-7_arm.xsh

ipkg update
ipkg upgrade
ipkg install git
三。配置
这部分操作是创建并配置好一个用户,使其能通过ssh登录系统,专门用于进行git相关操作

1. 以root登录,创建git用户

groupadd git(创建组git)
useradd -g git -m git(创建用户git,属于组git,同时创建用户主目录/home/git)
passwd git(设置git用户密码)
然后根据提示输入两遍密码

2. 修改ssh服务器的配置文件/etc/sshd_config,输入

vi sshd_config
然后编辑如下参数设置

StrictModes no(如果.ssh目录及相关文件的权限和拥有人owner等都能严格正确设置,可以设为yes)

UsePrivilegeSeparation no(这是必须的,否则git用户无法登录)

PermitUserEnvironment yes(必须的,使ssh加载用户自定义的环境配置文件)

3. 配置git用户环境变量文件,设置PATH(如果不设置好用户的PATH,运行git命令将提示”command not found”)。

输入如下命令:

cd /home/git(进入用户git的主目录)
mkdir .ssh
echo PATH=/mnt/disk1/.optware/bin:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin >> .ssh/environment

echo PATH=/mnt//array1/.optware/bin:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin >> .ssh/environment
chown -R git.git .ssh(更改.ssh目录及其中文件的owner为用户git)
chmod 700 .ssh(更改.ssh目录的权限)
chmod 600 .ssh/environment
4. 创建git项目的存储目录。输入命令

mkdir -m 777 /mnt/disk1/gits(创建目录gits来存放所有的git项目,权限777)

mkdir -m 777 /mnt/array1/gits
5. 重启sshd(见第一部分步骤8),然后用PuTTY以git用户登录,应该就能登上了。

四。测试
1.通过ssh以用户git登录,创建一个git项目testproj。输入命令

mkdir /mnt/disk1/gits/testproj.git(创建项目的目录)
cd /mnt/disk1/gits/testproj.git
git init –bare(初始化git仓库)
2. 在windows客户机上安装tortoiseGit和mysisgit并设置好,你就可以从服务器上clone项目testproj了。(具体操作不在本文讨论范围,请自行google之)

如果客户机是linux或mac,并且安装好了git,你可以直接输入命令

git clone git@192.168.1.100:/mnt/disk1/gits/testproj.git
回车后输入用户git的密码,就把testproj项目给clone下来了

五。其它
一开始我按照网上的很多教程root后,发现只有root用户能够通过ssh登录,其它用户都不能登录。经过几天在网上苦苦的搜寻,终于找到了原因和解决办法:ssh服务器在底层使用了sftp这个工具,这个工具有一个配置文件/etc/sftponly_config,这个配置文件里禁止了用户(在Buffalo LS-WVL的Web配置页面能看到的所有用户和组)的ssh登录,而且这个配置文件每次ssh服务器启动时都会重新生成,所以你改这个配置文件也没有用。
解决办法有两个:
1. 既然在Web配置页面能看到的所有用户和组(默认有用户admin,guest,组包括admin,guest,hdusers)都不能ssh登录,那么Web配置页面里看不到的用户和组,不就不受这个限制了吗。所以解决方法就是通过ssh以root登录,新建一个组git,然后再创建一个用户git,使其属于这个新建的组(创建用户时如果不指定其所属的组,就默认属于hdusers组,这个是配置文件/etc/sftponly_config里面禁止ssh登录的),这样这个用户git就可以登录了。(具体操作见上文第三部分步骤1)
2. 第二个解决方法就是想办法修改这个配置文件/etc/sftponly_config。打开ssh服务器的启动脚本/etc/init.d/sshd.sh,你可以在启动ssh服务器的代码前找到这样一行“nas_configgen -c sftp”,就是这行代码重新生成了配置文件/etc/sftponly_config,只要在这一行后面再加一行代码,把sftponly_config改一改,把所有的”allowssh no”全部改成”allowssh yes”,问题不就解决了吗。
(事实上这是我最开始找到的办法,但是由于操作比较复杂,而且有一定的安全隐患,所以还是建议使用第一个解决方法)
用vi来编辑/etc/init.d/sshd.sh,输入以下命令

vi /etc/init.d/sshd.sh
移动光标,在sshd_start()方法中找到“nas_configgen -c sftp”这一行,将光标移至行末,按a键,然后在这行之后插入一行:

sed -i ‘s/allowssh no/allowssh yes/g’ /etc/sftponly_config
按ESC键,输入”:wq”(双引号中间的3个字母)然后回车,这就保存退出了。

express

apt install node-express-generator
npm install -g express-generator
npm -g install express
express -V

错误:在项目目录执行 npm install express 或 npm link express

npm -g install serve-index
npm -g install socket.io
npm install -g forever

运维
npm i pm2 -g
pm2 init
pm2 start ecosystem.config.js

pm2 list
pm2 restart xxxx
pm2 log

mediasoup安装

下载

git clone https://github.com/versatica/mediasoup-demo.git

cd mediasoup-demo

git checkout v3

 app客户端
broadcasters广播推流
server服务器端,媒体服务(管道通信)与信令服务

配置服务器

cd server

npm install

cp config.example.js config.js

// Listening hostname (just for gulp live task).
domain : process.env.DOMAIN || ‘localhost‘,
// Signaling settings (protoo WebSocket server and HTTP API server).
https :
{
listenIp : ‘0.0.0.0’,
// NOTE: Don’t change listenPort (client app assumes 4443).
listenPort : process.env.PROTOO_LISTEN_PORT || 4443,
// NOTE: Set your own valid certificate files.
tls :
{
cert : process.env.HTTPS_CERT_FULLCHAIN || ${__dirname}/certs/<strong><span style="color: #ff0000;">fullchain.pem</span></strong>,//证书
key : process.env.HTTPS_CERT_PRIVKEY || ${__dirname}/certs/<span style="color: #ff0000;"><strong>privkey.key</strong></span> //证书
}
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions
webRtcTransportOptions :
{
listenIps :
[
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4′,  //服务器IP或0.0.0.0,浏览器的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
}
],
initialAvailableOutgoingBitrate : 1000000,
minimumAvailableOutgoingBitrate : 600000,
maxSctpMessageSize : 262144,
// Additional options that are not part of WebRtcTransportOptions.
maxIncomingBitrate : 1500000
},

// See https://mediasoup.org/documentation/v3/mediasoup/api/#PlainRtpTransportOptions
plainRtpTransportOptions :
{
listenIp :
{
ip : process.env.MEDIASOUP_LISTEN_IP || ‘1.2.3.4‘, //普通的传输
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP
},
maxSctpMessageSize : 262144
}

/启动server
npm start

//客户端安装 app目录
npm install
npm install -g gulp-cli
gulp live //客户端
gulp dist //生成发布目录/server/public

启动nodejs服务
node app.js
nohup node app.js &
forever start app.js 推荐此方式

调试
node –inspect-brk server.js
chrome://inspect
再根据需要设置断点

ubuntu重启、关机命令

重启命令 :
1、reboot
2、shutdown -r now 立刻重启
3、shutdown -r 10 过10分钟自动重启
4、shutdown -r 20:35 在时间为20:35时候重启

如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启

关机命令 :
1、halt 立刻关机(一般加-p 关闭电源)
2、poweroff 立刻关机
3、shutdown -h now 立刻关机
4、shutdown -h 10 10分钟后自动关机

如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消关机

 

1.shutdown

shutdown命令安全地将系统关机。
有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结﹐即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。
shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。

shutdown 参数说明:

[-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。
[-r] 重启计算器。
[-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。
[-h] 关机后关闭电源〔halt〕。
[-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往往不总是你所预期得到的。
[-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。
[-f] 在重启计算器〔reboot〕时忽略fsck。
[-F] 在重启计算器〔reboot〕时强迫fsck。
[-time] 设定关机〔shutdown〕前的时间。

例如:

/sbin/shutdown -h now-----立即关机;
/sbin/shutdown -h 20:49----20:49分关机
/sbin/shutdown -h +10-----10分钟后关机
/sbin/shutdown -r now -----立即重启
/sbin/shutdown -r +10 ‘The system will reboot’----10分钟后系统重启并给每个登录用户发通知
/sbin/shutdown -k now ‘The system will reboot’----仅给每个登录用户发通知并不真关机

2.halt—-最简单的关机命令

其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。

参数说明:

[-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。

[-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。
[-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
[-f] 没有调用shutdown而强制关机或重启。
[-i] 关机〔或重启〕前﹐关掉所有的网络接口。
[-p] 该选项为缺省选项。就是关机时调用poweroff。

3.reboot

reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它的参数与halt相差不多。

4.init

init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的用户进程﹑守护进程等。shutdown就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机﹐init1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐并且得不到使用shutdown时的信息和等待时间。

5.poweroff

关机,在多用户方式下(Runlevel 3)不建议使用.

用n升级nodejs

# 全局安装n
$ npm install -g n
# 升级到最新稳定版
$ n stable
# 升级到最新版
$ n latest
# 升级到定制版
$ n v12.13.1
# 切换使用版本
$ n 7.10.0 (ENTER)

安装完之后node -v 之后发现还是之前的版本呢,那么看下面

输入单独一个n 回车,通过控制上下键来选择你想要使用的node版本噢

有些小伙伴通过上面三步已经成功得到自己想要的版本了,但是有些小伙伴还是不行,那么不要着急,究极绝招来了,就是改node的环境变量,哈哈哈,一听到环境变量是不是一点都不陌生,那么接着往下看吧

a. 首先which node 找到node的安装目录,并复制我这里用默认目录代替哈 /usr/local/n/versions/node/10.0.0

b. 然后vim /etc/profile 在环境变量最后结尾部分加上
export NODE_HOME=/usr/local/n/versions/node/10.0.0
export PATH=NODE_HOME/bin:PATH

c. 最后记得source /etc/profile 让环境变量生效就可以了噢