首页 > 系统相关 >linux运维基础

linux运维基础

时间:2023-06-25 11:44:08浏览次数:50  
标签:rsync redis 运维 service ip 基础 systemctl linux root

1、时间同步

方案1:
ntpdate asia.pool.ntp.org 时间校准、时间同步

 

 方案2:


#!/bin/bash #安装chrony: yum install -y chrony #注释默认ntp服务器 sed -i 's/^server/#&/' /etc/chrony.conf #指定上游公共 ntp 服务器,并容许其余节点同步时间 cat >> /etc/chrony.conf << EOF server 0.asia.pool.ntp.org iburst server 1.asia.pool.ntp.org iburst server 2.asia.pool.ntp.org iburst server 3.asia.pool.ntp.org iburst allow all EOF #重启chronyd服务并设为开机启动: systemctl enable chronyd && systemctl restart chronyd #开启网络时间同步功能 timedatectl set-ntp true

 

2、systemctl\service\chckconfig 关系与区别 以及开机启动的设置办法

 

Systemctl和service、chkconfig命令的关系
systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器。
service命令:可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
chkconfig命令:是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。
所以systemctl命令是service命令和chkconfig命令的集合和代替。

一、service命令
service命令其实是去/etc/init.d目录下,去执行相关程序
# service命令启动redis脚本
service redis start
# 直接启动redis脚本
/etc/init.d/redis start
# 开机自启动
update-rc.d redis defaults
其中脚本需要我们自己编写


二、systemctl命令
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl

1)systemctl命令兼容了service
即systemctl也会去/etc/init.d目录下,查看,执行相关程序
2) 使用
systemctl redis start
systemctl redis stop
# 开机自启动
systemctl enable redis

systemctl 管理服务的启动、重启、停止、重载、查看状态等常用命令区分
System V init 命令(RHEL 6)	systemctl 命令(RHEL 7)	作用
service foo start	systemctl start foo.service	启动服务
service foo restart	systemctl restart foo.service	重启服务
service foo stop	systemctl stop foo.service	停止服务
service foo reload	systemctl reload foo.service	重新加载配置文件(不终止服务)
service foo status	systemctl status foo.service	查看服务状态


三、demo
将命令添加为service并设置开机启动:
vi /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start redis.service
systemctl enable redis.service

服务操作命令

systemctl start redis.service   #启动redis服务
systemctl stop redis.service   #停止redis服务
systemctl restart redis.service   #重新启动服务
systemctl status redis.service   #查看服务当前状态
systemctl enable redis.service   #设置开机自启动
systemctl disable redis.service   #停止开机自启动
开机启动:
1、给权限
chmod +x /etc/rc.d/rc.local
2、把要启动的内容放到/etc/rc.d/rc.local
注意:要是绝对路径

  

3、虚拟ip

 

Linux建立虚拟ip的方法
1、虚拟ip的介绍
虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址。数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口。
上边是百度的定义。
就是一块网卡上边有两个ip,然后无论到哪个ip的流量都会经过物理网卡。 
2、虚拟ip的作用
大部分虚拟ip基本上都用于高可用的架构上边。主机启用虚拟ip,所有访问的请求都会到主机。当主机宕机的时候,高可用软件会将主机的虚拟ip down掉,然后在备机上启用虚拟ip。这样就完成了主备切换。从而保证业务的可用性。 
3、linux中创建虚拟ip的方法
在linux中创建虚拟ip有两种方法,分别是:别名IP和辅助IP。

(1)别名ip 别名ip是通过ifconfig命令去创建和操作的虚拟ip。 <1>创建虚拟ip 使用ifconfig命令查看 使用命令创建 ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 up 上边可以看到生成了eth0:1然后ip是192.168.8.5的虚拟网卡。 <2>删除别名ip ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 down 很简单只要将后边的up改为down就可以了。 <3>开机生成虚拟ip 想要开机就有虚拟ip,可以在网卡的配置目录中去建立一个新的网卡的配置文件 centos和红帽都是在这个目录下/etc/sysconfig/network-scripts cp ifcfg-eth0 ifcfg-eth0:1 然后更改其中的ip即可,重启网卡就行。
(2)辅助ip 辅助ip是由linux的ip命令去创建和操作的。 <1>创建辅助ip ip addr add 192.168.8.5/24 dev eth0 <2>查看辅助ip 使用命令ip a就可以查看,但是不能使用ifconfig –a去查看。 <3>删除辅助ip ip addr del 192.168.8.5/24 dev eth0 也很简单,将add改为del即可。 <4>永久生效 这种方式创建的虚拟ip,可以将生成虚拟ip的命令写到/etc/rc.local中去。 开机即可自动加载。在配置redis-sentinel的时候可能会使用到

  

 

4、查找find&grep

 

一、find 
   可以找到你想要的文件
格式:  find [目录] [选项] [选项值]
目录:去哪找,可以不写,默认代表当前目录
选项:怎么找
    >> -name   按照名字找
        可以使用通配符
    -size   按照大小找
        单位为  kmg   10k(等于10k)   +10k(大于10k)   -10k(小于10k)
    -user   按照用户名
    -group  按照组名
    -maxdepth  -mindepth   限制查找的目录层级,默认递归查找所有
    -ctime  按照创建时间查找
        单位是天
选项值:找什么
    find / -name demo.txt
    find / -name \*.txt
    find / -size +10k
    find / -user demo.txt
    find / -group demo.txt
    find / -mindepth 4 -name \*.txt
    find / -mindepth 3 -maxdepth 5 -name \*.tx
二、grep
grep   查找的内容   文件路径
grep movie demo.txt
grep that ~/*.txt
选项
    --color=auto   将颜色高亮显示
        给 grep 指令起一个别名   vi ~/.bashrc
        添加一行     alias grep='grep --color=auto'
        让配置文件立即生效       source ~/.bashrc
    -c         得到内容的个数
    -i         不区分大小写的查找
    -n         显示在文档中的行号
    -r         递归查找,但是不能限制后缀,只能遍历所有
        grep -r that ~/*
    -l         只显示文件名,不显示内容
    grep -l 你好 ~/test/*.txt


正则表达式进行查找(少用)
    \w(数字字母下划线)   
    \W(除了上面)
    \d(数字)
    \D(非数字)
    .(除了换行符)
    *(任意多个)
    +(至少1个)
    ?(0个或者1个)
    [email protected]   [email protected]   [email protected]   [email protected]
    grep -E .*? demo.txt 
    -E   使用正则表达式来进行匹配
三、demo
find / -type f -name 'vars.example' 查找名字为vars.example的文件
 find / -type f -size +100M 查找大于100M的文件
find 文件目录  -type f |xargs grep "查询内容";  查找包含指定内容的文件
du -h --max-depth=1 / | grep '[0-9]G\>' 查找1g以上的文件

  

5、任务的前后台运行方式的控制

 

(1) nohup 加在一个命令的最前面,表示不挂断的运行命令
(2) & 加载一个命令的最后面,表示这个命令放在后台执行

如何查看&后台运行的任务:
jobs -l

(1)fg命令将后台中的命令调至前台继续运行
如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令将一个正在前台执行的命令放到后台,并且处于暂停状态
(3)bg命令将一个在后台暂停的命令,变成在后台继续执行

  

6、服务器内免密登录其他主机

 

免密登录:
    步骤1:主机生成公共签名文件
    默认存在这个目录:(/root/.ssh/id_rsa)
    ssh-keygen -t rsa
    步骤2:将公共签名文件发给从机某个目录,比如root目录下
     scp /root/.ssh/id_rsa.pub [email protected]:/root/id_rsa.pub
    步骤3:从机处理下签名文件
     追加到信任主机列表:cat /root/id_rsa.pub >>   /root/.ssh/authorized_keys
     修改权限:chmod 600 /root/.ssh/authorized_keys 
    步骤4:验证
    ssh [email protected] 
    如果不需要密码可以登录就是成功的

  

7、rsync同步工具 

rsync
1、主机
  步骤1:yum install rsync inotify-tools
  步骤2: 创建rsync client和inotify合体脚本  
   /app/rsync/rsync.passwd:
	 echo "Tong123InChina@abc" > /app/rsync/rsync.passwd
   
   
	/app/rsync/rsync_do.sh :
		src='/home/zzl/'
		passwordfile='/app/rsync/rsync.passwd'
		user='root'
		host='101.200.122.239'
		rsync_module='uploads'

		/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib ${src} | while read DATE TIME DIR file
		do
			/usr/bin/rsync -vzrtopg  --delete --progress ${src} ${user}@${host}:/home/zzl
	
			echo "${file} was rsynced at ${DATE}_${TIME} in ${DIR}" >> /var/log/rsync.log 2>&1
		done
   步骤3:后台运行rsync
	nohup /app/rsync/rsync_do.sh & 
   步骤4:如何结束后台的rsync任务
	jobs -l
	kill -9 **
	
2、从机
  步骤1:yum install rsync
  步骤2: 创建secrets file验证文件 并且设置权限为600
	echo "root:Tong123InChina@abc" > /app/rsync/rsync.passwd
    chmod 0600 /app/rsync/rsync.passwd
  步骤3:创建rsync server的配置文件 /app/rsync/rsync.conf
	uid = root
	gid = root
	use chroot = no
	max connections = 3
	timeout = 800
	pid file = /var/run/rsyncd.pid
	lockfile = /var/run/rsyncd.lock
	log file = /var/log/rsyncd.log
	[uploads]
	path = /home/zzl/
	ignore errors = no
	hosts allow = 47.105.93.58
	hosts deny = *
	read only = no
	write only = no
	list = yes
	uid = root
	gid = root
	auth users = root
	secrets file = /app/rsync/rsync.passwd
   步骤4:运行daemon模式
	rsync --daemon --config=/app/rsync/rsync.conf

  

8、nginx平滑升级

步骤0:测试新的执行文件 对老的nginx.conf是否正常
/opt/nginx-1.21.1/objs/nginx -t -c /usr/local/nginx/conf/nginx.conf
步骤1:备份旧的可执行文件,将新的版本拷贝到sbin目录
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp /opt/nginx-1.21.1/objs/nginx /usr/local/nginx/sbin/
步骤2:kill –USR2 旧版本的nginx主进程号
ps aux | grep nginx//查看进程号
kill -usr2 ***
步骤3:观察新版本是否正常,如果正常就结束旧版本nginx的运行
kill -winch 旧版主进程号
kill -quit 旧版主进程号

  

9、脚本处理某pid的进程

 

找到端口为8050的进程id,结束任务
pid=`netstat -anp|grep 8050|awk '{printf $7}'|cut -d/ -f1`
kill -9 $pid
10 03 * * * /usr/bin/bash  /opt/atlassian/jira/bin/zzl_stop_jira.sh
20 03 * * * /usr/bin/bash  /opt/atlassian/jira/bin/startup.sh

  

 

10、硬盘处理与分析

1、查看所有磁盘信息,即可以查看到我们的u盘的状态 (主要看分区还有文件系统)输入指令 sudo fdisk -l
2、挂载U盘
假如我们的优盘是fat32格式的
输入指令:mount -t vfat /dev/sdb1 /media
如果是NTFS格式的话
输入指令:mount -t nfs /dev/sdb1 /media
这样就把u盘挂载到media目录了(注意/dev/sdb1 是指u盘的分区 ,你的可能不同)
最后我们只要使用命令:cd /media 再 ls 就ok 了
(注意以上操作需要root权限)
3、卸载u盘
只需要执行:sudo umount /media/

磁盘分析神器:
wget http://dev.yorhel.nl/download/ncdu-1.11.tar.gz
tar -zxf ncdu-1.11.tar.gz
yum install glibc 
yum install ncurses ncurses-devel
./configure  && make && make install
ncdu -x -q

  

11、abc网络划分

 

A、B、C网
A类地址、B类地址、C类地址、D类地址和E类地址他们区别和划分是根据IP地址根据网络ID的不同。最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个id,即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。
以下是他们分别的意义:
1.A类IP地址 :一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 
2. B类IP地址 :一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3. C类IP地址 :一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。

  

12、网络追踪与排查

1. traceroute的作用
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。
当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走
的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
linux系统中,我们称之为traceroute。

traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。
一条路径上的每个设备traceroute要测3次。
输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
2. traceroute的执行
大多数情况下,我们会在linux主机系统下,直接执行命令行:traceroute hostname
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。

  

13、定时任务处理

设置定时任务:
 ①创建定时脚本
  vi /home/wwwroot/public/timertask.sh
  /usr/bin/php /homw/wwwroot/public/code/getNewsToDatabase.php
②指定定时任务
  crontab -e // 进入到编辑用户的定时任务界面
  */2 * * * * /bin/sh /homw/wwwroot/public/timertash.sh
③查看当前用户的定时任务
  crontab -l
④查看定时任务执行的日志信息
 cat /var/log/cron
 0 */1 * * * /usr/sbin/ntpdate asia.pool.ntp.org 每隔1小时执行
 * */1 * * * /usr/sbin/ntpdate asia.pool.ntp.org 每1分钟执行
 0 0 * * * /usr/bin/python3 /root/web_spider/news/configs/every_day_NumerId.py 每天0时0分执行
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

前四行是用来配置crond任务运行的环境变量
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
第二行PATH变量指定了系统执行命令的路径
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户
如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

  

14、系统日志查看

journalctl 查询系统日志的工具

查看某时间段的日志
journalctl --since "2020-01-01 20:00:00" --until "2020-02-01 20:15:00"

查看某个服务的日志
journalctl -u rsyslog.servrice

journalctl -xe是什么意思
-xe是排查问题时最常用的参数:-e 从结尾开始看 -x 相关目录(如:问题相关的网址)

滚屏输出日志
journalctl -f -n 20;  

  

15、常见系统日志及目录

linux中有一个重要的目录就是:/var/log/目录,主要存放的是系统日志文件:

/var/log/message :系统启动后的信息和错误日志,是Linux中最常用的日志之一
/var/log/secure :与安全相关的日志信息
/var/log/maillog :与邮件相关的日志信息
/var/log/cron :与定时任务相关的日志信息
/var/log/spooler :与UUCP和news设备相关的日志信息
/var/log/boot.log :守护进程启动和停止相关的日志消息


其他常见目录:
bin :存放普通用户可执行的指令,即使在单用户模式下也能够执行处理
boot :开机引导目录,包括Linux内核文件与开机所需要的文件
dev :设备目录,所有的硬件设备及周边均放置在这个设备目录中
etc:各种配置文件目录,大部分配置属性均存放在这里
home:这里主要存放你的个人数据,具体每个用户的设置文件,用户的桌面文件夹,还有用户的数据都放在这里。每个用户都有自己的用户目录,位置为:/home/用户名。当然,root用户除外。
lib:开机时常用的动态链接库,bin及sbin指令也会调用对应的lib库
lib64:开机时常用的动态链接库64位,bin及sbin指令也会调用对应的lib库
lost+found:是一个特殊目录,用途是用来存放文件系统错误导致文件丢失后找回数据的;如果你不小心删除了lost+found目录,不用使用mkdir命令创建lost+found目录,应该使用 mklost+found命令创建lost+found目录。
media:可移除设备挂载目录,类似软盘 U盘 光盘等临时挂放目录
mnt:用户临时挂载其他的文件系统,额外的设备可挂载在这里,相对临时而言
opt:第三方软件安装目录,现在习惯性的放置在/usr/local中
proc:虚拟文件系统,通常是内存中的映射,特别注意在误删除数据文件后,比如DB,只要系 统不重启,还是有很大几率能将数据找回来
root:系统管理员主目录,除root之外,其他用户均放置在/home目录下
run:系统运行是所需文件,以前防止在/var/run中,后来拆分成独立的/run目录。重启后重新生成对应的目录数据
sbin:只有root才能运行的管理指令,跟bin类似,但只属于root管理员
srv:服务启动后需要访问的数据目录,
sys:跟proc一样虚拟文件系统,记录核心系统硬件信息
tmp:存放临时文件目录,所有用户对该目录均可读写
usr:应用程序放置目录,
var :存放系统执行过程经常改变的文件,
vmlinuz : 是可引导的,压缩的linux内核,“vm”代表的“virtual memory”,一般是一个软连接.

  

 

标签:rsync,redis,运维,service,ip,基础,systemctl,linux,root
From: https://www.cnblogs.com/kunyashaw/p/17502536.html

相关文章

  • Linux 安装/卸载 MySQL 8.0
    Linux安装/卸载MySQL8.0原创 默存 全栈客 2023-06-1511:14 发表于甘肃收录于合集#linux1个#mysql1个安装Centos安装MySQL8.0操作系统环境[root@t2 local]# hostnamectlStatic hostname: hadoop-masterIcon name: computer-desktopChassis: de......
  • 【webpack系列】从基础配置到掌握进阶用法
    前言本篇文章将介绍一些webpack的进阶用法,演示内容继承自上一篇文章的内容,所以没看过上一篇文章的建议先学习上一篇内容再阅读此篇内容,会更有利于此篇的学习~文件指纹文件指纹指的是打包输出的文件名后缀,一般用来做版本管理、缓存等webpack的指纹策略有三种:hash、chunkhash......
  • 深入Python网络编程:从基础到实践
    Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力。Python的强大网络库如socket,requests,urllib,asyncio,等等,让它在网络编程中表现优秀。本文将深入探讨Python在网络编程中的应用,包括了基础的socket编程,到高级的异步IO网络编程,以及我们如何......
  • linux dmesg
    简介dmesgisusedtoexamineorcontrolthekernelringbuffer.Thedefaultactionistodisplayallmessagesfromthekernelringbuffer.Linux内核启动时会加载硬件驱动,在有新硬件时也会加载驱动,如果想要查看内核的活动,可以使用dmesg命令。Linux内核日志存储在......
  • golang入门,基础语法demo(1)
    packagemainimport"fmt"funcmain(){//声明变量varaint//使用var关键字声明变量a,类型为inta=1//赋值fmt.Println(a)//类型推导//使用:=自动推导类型并声明变量b,其类型为stringb:="helloworld"fmt.Pr......
  • linux查看cpu信息
    查看CPU信息(型号)1cat/proc/cpuinfo|grepname|cut-f2-d:|uniq-c #查看物理CPU个数1cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l #查看每个物理CPU中core的个数(即核数)1cat/proc/cpuinfo|grep"cpucores"|uniq #查看逻辑CP......
  • 在Linux下搭建Git服务器
    众所周知,版本系统在开发环境中是必不可少的,但是我们可以把代码免费的托管到GitHub上,如果我们不原意公开项目的源代码,公司又不想付费使用,那么我们可以自己搭建一台Git服务器,可以用Gitosis来管理公钥,还是比较方便的。搭建环境:服务器 CentOS6.6+git(version1.8.3.1)客户......
  • 嵌入式linux的几点小经验总结
    自己的功能一定要做下班后的自动化测试,不能指望测试部给测出问题(自动化测试可以用python来控制,比如python通过继电器控制产品的上下电或者触控等操作,比如打开关闭摄像头,然后通过adb读取测试完毕后的状态,比如摄像头是否有图像输出)电信类产品往往要求很高,所以常常有主......
  • requests Python中最好用的网络请求工具 基础速记+最佳实践
    简介requests模块是写python脚本使用频率最高的模块之一。很多人写python第一个使用的模块就是requests,因为它可以做网络爬虫。不仅写爬虫方便,在日常的开发中更是少不了requests的使用。如调用后端接口,上传文件,查询数据库等。本篇详细介绍requests的使用。requests是⽤Python......
  • 强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回
    强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、doubleDQN、经验回放、rainbow、分布式DQN1.核心词汇深度Q网络(deepQ-network,DQN):基于深度学习的Q学习算法,其结合了价值函数近似(valuefunctionapproximation)与神经网络技术,并采用目标网络和经验回放等方法进......