运维相关日志
12月25
一. 错误信息
先上阿里云上的报警信息。有个最大的问题是:top命令查看自己服务器CPU运行情况,会发现kdevtmpfsi的进程,CPU使用率为100%,第一次删除干净了kdevtmpfsi程序,没曾想几分钟以后,就出现了第二个警告。使用netstat -antp命令查看端口使用情况,又出现了kdevtmpfsi如图所示

netstat -antp

点击在新窗口中浏览此图片

二.解决方法
一般出现kdevtmpfsi病毒都会伴有定时任务,就会出现我上面说的处理一次后,又会继续出现,反反复复处理不干净。

1.首先停掉kdevtmpfsi的程序
ps aux
找到kdevtmpfsi的进程

删除掉与kdevtmpfsi相关的进程
点击在新窗口中浏览此图片
kill -9 20267
kill -9 20367

2.删除Linux下的异常定时任务
crontab -l 查看定时任务
crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除

如下图所示点击在新窗口中浏览此图片

3.结束kdevtmpfsi进程及端口占用
netstat -antp

找到kdevtmpfsi端口 我这里是28244 图中可以看到。不要直接杀掉,因为有守护线程还会重启。

ps -aux | grep kinsing
ps -aux | grep kdevtmpfsi



kill -9 28244
kill -9 28829

4.删除掉kdevtmpfsi的相关文件
cd  /tmp
ls
rm -rf kdevtmpfsi
rm -rf /var/tmp/kinsing  
最后自己可以再检查一下是否还有kdevtmpfsi的相关文件,有的话就继续删除
find / -name kdevtmpfsi
find / -name kinsing

三.怎么预防处理这个病毒
最根本的原因可能是自己的redis 6379配置不当导致的。大家可以参考阿里云的Redis服务安全加固
当然也可能是弱密码,被强行扫描了,建议定期更换系统密码。

也可以使用下面工具清除
#! /bin/sh
step=1
for (( i = 0; i < 60; i = (i+step) )); do
                date >> /data/shell/clear_date_log.txt
                KID=$(ps -ef |grep kdevtmpfsi |grep -w 'kdevtmpfsi'|grep -v 'grep'|awk '{print $2}')
                if [ $KID];then #

                                                              echo "[info]kdevtmpfsiIDΪ:$KID" >> /data/shell/clear_date_log.txt
                kill -9 $KID
                rm -f /tmp/kdevtmpfsi
    fi
                sleep $step
done

exit 0

复制上面代码另存为kill_kdevtmpfsi.sh
12月17
一、执行程序切换后台
执行java -jar xxx.jar & 或者nohup java -jar xxxx.jar &。nohup不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系。
ctrl+z退出到控制台,执行 bg
执行exit
完成以上3步,退出SHELL后,jar服务一直在后台运行。

nohup java -jar XXX.jar >log.out &;
nohup是保证ssh连接关闭后,jar任然运行的关键,& 相当于后台运行,你后面还可以输入命令, >log.out  是输出日志的地方
ps aux|grep XXX.jar 查看某jar包的运行的进程号

二、结束进程
通过执行ps auxwww &#124; grep XXX.jar通过查找进程关键字 找到进程PID。
执行kill -9 {PID} 杀死进程PID数字结束进程。
12月9
有个同事说使用Minio时发现返回的url访问直接访问不到,需要登录并且有有效期生成的文件地址,下面主要讲下在Minio中通过程序上传后的文件,返回的地址无法对外访问的问题。

MinioClient minioClient = new MinioClient(minio_url, minio_name, minio_pass);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String ymd = sdf.format(new Date());
        String objectName = ymd + "/" + UUID.randomUUID().toString() + (suffix != null ? suffix : "");
        minioClient.putObject(bucketName, objectName, inputStream, contentType);
        String url = minioClient.getObjectUrl(bucketName, objectName);
这里程序得到的地址,如果你想在浏览器直接访问是不行的。如果想要访问,需要对Minio进行一些设置。

Minio的称之为policy 即桶策略。如果想要直接访问图片,需要设置Bucket的访问策略。

官方文档 https://docs.minio.io/cn/minio-client-complete-guide.html#mb

下面介绍两种方法来实现永久访问,两种方法效果是一样的。

一、通过管理界面实现

登录后台管理界面,在右下角有个红色的加号图标,点击它,然后会看到下面的效果

点击create bucket ,输入要创建的bucket,如test

回车就可创建成功。

创建成功之后对bucket进行编辑。在页面的右上角。找到刚刚创建的test bucket。

点击那三个点,选择Edit policy ,会弹出下面的弹窗。

点击在新窗口中浏览此图片
在Prefix中输入* ,即允许所有访问。右边的选项选择 Read and write。
点击在新窗口中浏览此图片

然后点击Add 按钮就可以了。

-----------------------------------------------------------------------------------------------------------------------------------------

二、通过Minio提供的客户端来实现

Minio单独提供了一个客户端来设置Minio的服务端。

1、下载客户端程序

下载地址 https://dl.minio.io/client/mc/release/windows-amd64/mc.exe

2、启动一个cmd窗口,进入mc.exe的目录

输入 .\mc.exe --h 可以查看mc.exe的命令帮助。

3、设置服务端

使用 minio client 将自己的 minio server 添加到 mc 的配置管理,命令如下

.\mc.exe config host add minio http://192.168.50.179:9000 3K2287Q20OW3HWQ2FJXJ L0eTMaBzVQwUgbeuo05f+qmSA
buZiWt4yZfDzrMv
Added `minio` successfully.
此命令将 http://192.168.50.179:9000 取一个别名 minio ,并交给mc进行配置管理。

4、查看minio中的桶,命令

.\mc.exe ls minio
[2021-12-08 20:34:25 CST]     0 B asiatrip\
[2021-12-08 21:15:55 CST]     0 B tonnyyy\
[2021-12-08 20:54:28 CST]     0 B xzspfj\
5、设置桶的访问策略,命令

.\mc.exe policy public minio/xzspfj/20211208/
Access permission for `minio/xzspfj/20211208/` is set to `public`
通过以上步骤,图片就可以直接通过地址进行访问了。
12月7
平时我们经常查看容器的日志,命令如下:

docker logs -f 容器名或者容器id

随着时间的推移,日志文件越来越大,那么我们该如何清理日志文件呢?下面来讲解清理的步骤:

1.进入docker容器目录:

cd /var/lib/docker/containers/


2.查看容器的id,获取容器id,容器id就是容器目录名字

docker ps -a


3.进入容器,删除以log结尾的文件就是日志文件了,删除即可:

rm -rf 容器id.log


4.重启容器

docker restart 容器名或者容器id

打完收工!
12月7
在Java后面添加如下参数即可
9520为远程调试端口
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9520 -jar ./leo-barcode.jar
12月6
报错信息:
java.io.IOException: No space left on deviceat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:282)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)

服务器磁盘不足,df -h 一下,发现tmpfs挂载的tmp文件夹只有2M剩下的只有几K了,在想应该是这个问题,于是将tmp目录调大一点,下面调到2g,输入以下命令:
mount -t tmpfs  -o size=2g   tmpfs /tmp

重新上传文件,发现成功上传,问题解决。
12月1
目录结构: tomcat/logs目录.

1.实时查看当前项目的运行日志,进入logs目录,
tail -f catalina.out

扩展: ( 退出 )

ctrl + c



2.查询某个时间段的日志?
首先, 日志中要有程序记录的时间,然后在logs目录下执行此命令: ( 把这段时间的日志输出到新的文件中。 )

sed -n '/2021-12-01 11:30:/,/2021-12-01 11:40:/p' catalina.out > new.out

解析: ( 命令详解 )

sed -n '/年份-月份-日期 小时:分钟:/,/年份-月份-日期 小时:分钟:/p' catalina.out > 新的的文件名称.out


注意:
       若catalina.out文件比较大, 可以就会比较慢, 等待一会就可以了!


3.扩展一个<清空>日志文件的命令? ( 你可能会用到 )
echo ' ' > catalina.out

why?
       若日志文件过大, 可能会导致服务器磁盘空间满了, 有些接口可能不能正常访问. ( 此时就需要解决! )
       通过这种方法,磁盘空间可以立即释放,进程可以继续向文件写入日志,但不必重启服务器。
11月18

Linux系统时间同步

15:27运维管理  From: 本站原创
在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系。系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不间断。但在Linux下,默认情况下,系统时间和硬件时间并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU Tick来维持的。在系统开机的时候,会自动从BIOS中取得硬件时间,设置为系统时间。

1. Linux系统时间的设置

在Linux中设置系统时间,可以用date命令:


//查看时间
[root@node1 ~]# date
Tue Feb 25 20:15:18 CST 2014
//修改时间
[root@node1 ~]# date -s "20140225 20:16:00"  #yyyymmdd hh:mm:ss
Tue Feb 25 20:16:00 CST 2014
//date 有多种时间格式可接受,查看date --help

2. Linux硬件时间的设置

硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。


//查看硬件时间可以是用hwclock ,hwclock --show 或者 hwclock -r
[root@node1 ~]# hwclock --show
Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds
//设置硬件时间
[root@node1 ~]# hwclock --set --date "20140225 20:23:00"
[root@node1 ~]# hwclock
Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds


3. 系统时间和硬件时间的同步

同步系统时间和硬件时间,可以使用hwclock命令。


//以系统时间为基准,修改硬件时间
[root@node1 ~]# hwclock --systohc <== sys(系统时间)to(写到)hc(Hard Clock)
//或者
[root@node1 ~]# hwclock -w
//以硬件时间为基准,修改系统时间
[root@node1 ~]# hwclock --hctosys
//或者
[root@node1 ~]# hwclock -s

4. 不同机器之间的时间同步

为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。

不同机器间同步时间,可以使用ntpdate命令,也可以使用ntpd服务。
11月18

k8s常用操作

14:26运维管理  From: 本站原创
架构
点击在新窗口中浏览此图片
组件基本交流流程
点击在新窗口中浏览此图片
核心对象
点击在新窗口中浏览此图片
k8s常见操作

创建配置
$ vim examplepod.yml
在文件中填入如下内容并保存。


apiVersion: v1
kind: Pod
metadata:
  name: examplepod
spec:
  containers:
  - name: examplepod-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c']
    args: ['echo "Hello Kubernetes!"; sleep 3600']
执行一个service

$ kubectl apply -f examplepod.yml
获取执行中的pod

$ kubectl get pod
获取单个pod

$ kubectl get pod {Pod名称}
持续监控
$ kubectl get pod {Pod名称} -w
详细参数
$ kubectl get pod {Pod名称} -o wide
输出详细参数
$ kubectl get pod examplepod --output yaml
$ kubectl get pod examplepod --output json
查看详细信息
$ kubectl describe pods {Pod名称}
查看日志
$ kubectl logs {Pod名称}
修改pod
$ kubectl replace -f {pod模板路径}
强制修改

kubectl replace -f example.yaml  --force
删除pod

$ kubectl delete pod {Pod名称}
模板删除

$ kubectl delete -f {模板文件名称}

11月18
gitlab安装
docker启动gitlab 并配置端口号 因为要映射到外网 因此docker的第一个端口号要与外网端口号一致 防止新建的库端口号与访问地址不一致

docker run -d \
    -p 80:30039 \
    -p 443:443 \
    -p 1022:22 \
    --name gitlab \
    --restart unless-stopped \
    -v gitlab-config:/etc/gitlab \
    -v gitlab-logs:/var/log/gitlab \
    -v gitlab-data:/var/opt/gitlab \
    twang2218/gitlab-ce-zh

修改配置文件/etc/gitlab/
配置 external_url 为新建库地址 smtp配置为邮件服务

external_url 'http://www.heckjj.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "i@heckjj.com"
gitlab_rails['smtp_password'] = "OFJGZWLKJQVXWLHK"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = "i@heckjj.com"        #配置gitlab的配置的发信人

访问 http://www.heckjj.com/ 设置密码
登录账号:root
密码:设置的密码

git常见操作

命令行操作:
Git 全局设置

git config --global user.name "heck"
git config --global user.email "i@heckjj.com"
创建新版本库

git clone http://www.heckjj.com/heck/heck.git
cd heck
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
已存在的文件夹

cd existing_folder
git init
git remote add origin http://www.heckjj.com/heck/heck.git
git add .
git commit -m "Initial commit"
git push -u origin master
已存在的 Git 版本库

cd existing_repo
git remote rename origin old-origin
git remote add origin http://www.heckjj.com/heck/heck.git
git push -u origin --all
git push -u origin --tags
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]