经过自己在windows Server 2016 Standard服务器上 安装了一个虚拟机,但是出现了一个问题就是死活查不到ip地址,也查过百度该试的都试了但是还是不行。下面就是出现的问题。
这个问题已经解决了,首先这个vmware的网络模式:vmware有三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)
1、Bridged(桥接模式)
VMnet0表示的是用于桥接模式下的虚拟交换机,桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。如果想把虚拟机当做一台完全独立的计算机看待,并且允许它和其他终端一样的进行网络通信,那么桥接模式通常是虚拟机访问网络的最简单途径
2、NAT(网络地址转换模式)
VMnet1表示的是用于仅主机模式下的虚拟交换机。使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据,都会交由NAT网络适配器加上”特殊标记”并以主机的名义转发出去,外部网络返回的响应数据”包裹”,也是先由主机接收,然后交由NAT网络适配器根据”特殊标记”进行识别并转发给对应的虚拟机,因此,虚拟机在外部网络中不必具有自己的IP地址。从外部网络来看,虚拟机和主机在共享一个IP地址,默认情况下,外部网络终端也无法访问到虚拟机。此外,在一台主机上只允许有一个NAT模式的虚拟网络。因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的,应为他们在同一个nat模式的虚拟网络下。使用笔记本安装虚拟机的我比较建议使用NAT模式,通常我们都期望虚拟机使用一个固定IP,但使用笔记本过程中,每次切换网络环境都要重新去配置虚拟机的网络,如果使用NAT模式,这样就可以在切换主机网络环境的情况下,不用修改虚拟机网络也可以使用了。
3、Host-Only(仅主机模式)
对于Hosy-Only模式,没使用过,仅主机模式,是一种比NAT模式更加封闭的的网络连接模式,它将创建完全包含在主机中的专用网络。仅主机模式的虚拟网络适配器仅对主机可见,并在虚拟机和主机系统之间提供网络连接。相对于NAT模式而言,仅主机模式不具备NAT功能,因此在默认情况下,使用仅主机模式网络连接的虚拟机无法连接到Internet(在主机上安装合适的路由或代理软件,或者在Windows系统的主机上使用Internet连接共享功能,仍然可以让虚拟机连接到Internet或其他网络)。在同一台主机上可以创建多个仅主机模式的虚拟网络,如果多个虚拟机处于同一个仅主机模式网络中,那么它们之间是可以相互通信的;如果它们处于不同的仅主机模式网络,则默认情况下无法进行相互通信(可通过在它们之间设置路由器来实现相互通信)。
解决方案:
第一步:查看网关: 编辑–》虚拟网络编辑器
第二步:进入存放修改IP地址的目录:
cd /etc/sysconfig/network- scripts/
第三步修改ip地址的文件:
vim ifcfg-ens33
第四步:修改静态IP地址和网关
- 修改BOOTPROTO=static
- 添加以下内容:IP地址、子网掩码、网关、dns服务器
IPADDR=192.168.75.100
GATEWAY=192.168.75.2
NETMASK=255.255.255.0
DNS1=218.4.4.4
DNS2=8.8.8.8
第五步:重启网络
systemctl restart network
第六步:可以ping一下 就能知道是否连上网 然后可以下一步的操作
SpringBoot项目,日志不再写在数据库里,而是写在服务器的日志文件中,这样项目初期没有问题,但是时间久了就会导致服务器上的日志文件越来越多,内存占用也越来越大,这样肯定不行!人工维护?No!这里提供一个简单粗暴的解决方式,即利用 Linux 的 crontab 定时任务来实现,当练手了。
- 定时备份当前 console.log 日志文件
- 清空当前 console.log 日志文件内容
- 定时清理 console.log 备份日志文件
- 定时清理 log-info.log 备份日志文件
1、 准备工作
先了解下此文 demo 项目的文件目录结构,大家后续根据需要适当调整脚本即可。 我这个项目是一个简单的 springboot 项目,没有结合 ES、kafka 等做日志平台处理。
- sh 文件维护在:/home/deploy/logdeal-task.sh
- 日志文件根:/home/logs/gemp-data,如图
- 重点:这里说明一下这些日志文件含义
- console.log: 是服务器启动命令 /home/deploy/gemp-data.sh 中将日志都打印到了这里,类似 nohup.out、catalina.out等。
- log_info.log:程序中 info 级别的日志
- /info 目录:是对 log_info.log 的备份,这个机制在 SpringBoot 的 logbak.xml 中实现的。并且在备份后会自动清理当前 log_info.log
- /bak目录: 是这里我对 console.log 的备份目录,与 /info 区别在于,console.log 我需要手动清理一下。
2、 脚本实现
2.1 执行命令准备
- 创建文件:touch /home/deploy/logdeal-task.sh
- 授权(日志任务如果没有权限也需要授权一下):chmod +x logdeal-task.sh
- 编辑操作命令
- 定时备份当前 console.log 日志文件
- 清空当前 console.log 日志文件内容
- 定时清理 console.log 备份日志文件
- 定时清理 log-info.log 备份日志文件——》这一步不做也可以,因为 logback.xml 中也能实现自动清理,如
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
#!/bin/sh
# 备份 console.log ——> 清空当前 console.log 内容 ——> 清理 bak 下的 n 天前的 console.log 备份文件——> 清理info下的 n 天前的日志文件
# 先备份console.log日志文件, 如果是其他的,参考改下名字即可
mkdir /home/logs/gemp-data/bak
cp -r /home/logs/gemp-data/console.log /home/logs/gemp-data/bak/$(date +%Y%m%d).log
# 清空当前 console.log,释放空间
cat /dev/null > /home/logs/gemp-data/console.log
# 清理15天前的console.log日志文
find /home/logs/gemp-data/bak/ -name "*.log" -mtime +15 -exec rm -rf {} \;
# 清理15天前的log-info.log日志文
find /home/logs/gemp-data/info/ -name "*.log" -mtime +15 -exec rm -rf {} \;
2.2、Linux 下创建定时任务
2.2.1、crontab 常用命令
-e #编辑定时任务
-l #查看定时任务
-r #删除定时任务
-u #指定其他用户
2.2.2 命令行操作
- crontab -e
- 输入i回车,输入下面命令,每天凌晨4点01分执行【也可以直接编辑:/var/spool/cron】
01 04 * * * /home/deploy/logdeal-task.sh >/dev/null 2>&1
- 每隔1分钟执行一次可以这样写
/1 * * * * /home/deploy/logdeal-task.sh >/dev/null 2>&1
- 输入 ESC 然后输入 :wq 保存
- 重启crond服务
service crond restart
- 查看任务【也可以直接到 /var/spool/cron 下查看】:
crontab -l
- 查看日志 /var/log 文件中
tail -f /var/log/cron
3、附甜点
cron校验在线工具: https://tool.lu/crontab/
cron Linux上的表达式说明
SpringBoot下cron表达式使用
@Scheduled 注解也支持 cron 表达式,可以非常丰富的描述定时任务的时间。cron 表达式格式如下:[秒] [分] [小时] [日] [月] [周] [年]
通配符含义:
- “?” 表示不指定值,即不关心某个字段的取值时使用。需要注意的是,月份中的日期和星期可能会起冲突,因此在配置时这两个得有一个是 ?
- “*” 表示所有值,例如:在秒的字段上设置 *,表示每一秒都会触发
- “,” 用来分开多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
- “-” 表示区间,例如在秒上设置 “10-12”,表示 10,11,12秒都会触发
- “/” 用于递增触发,如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)
- “##” 序号(表示每月的第几个周几),例如在周字段上设置”6##3”表示在每月的第三个周六,(用 在母亲节和父亲节再合适不过了)
- 周字段的设置,若使用英文字母是不区分大小写的 ,即 MON 与mon相同
- “L” 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会自动判断是否是润年), 在周字段上表示星期六,相当于”7”或”SAT”(注意周日算是第一天)。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示”本月最后一个星期五”
- “W” 表示离指定日期的最近工作日(周一至周五),例如在日字段上设置”15W”,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“)
- L 和 W 可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发(一般指发工资 )