第四周

内容纲要

1、定时任务

cron--周期性计划任务,最小执行时间为1分钟

范例:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #设置PATH变量后,以下所有命令可直接调用,不用再写命令位置
0 3 * * 3 date  #每周三的凌晨3点执行date命令
*/6 8 1 * * ntpdate ntp1.aliyun.com #每个月的1号从8点开始每隔六分钟执行一次同步服务器时间
41,51 11 * * 1-5 date #每周一到周五的11点41开始,隔十分钟执行一次date
0 9 1 6-9 3 date #6月到9月的1号或者周三的早上9点执行date命令
31 10-23/2 * * *  date #在每天的10点31开始,每隔两小时执行一次date

2、Linux进程和内存

进程:进程是运行中程序的一个副本,是被载入内存的一个指令集,是资源分配的单位

1)进程ID(PID):标记各个进程的号码

2)系统中第一个进程:init(centos6)、systemd(centos7/centos8/ubuntu)

3)存在生命周期

4)通常由执行进程的用户来继承

进程运行的状态:

  • 创建
  • 就绪:
  • 执行
  • 终止
  • 阻塞

内存:

内存通常指服务器物理内存,但使用命令查看内存时会发现几部分内容。

第一行:
total:总物理内存
used:已使用的物理内存
free:空闲的物理内存
shared:共享内存
buff/cache:缓冲区/缓存
available:可使用的内存
第二行:
Swap:虚拟内存

进程使用内存会出现三种问题:

内存泄露:指程序中申请了一块内存,但是没有将内存释放,导致这块内存一直处于占用状态

内存溢出:指程序申请了100M内存,但是在这个空间内写入了100M以上的数据

内存不足:OOM,内存用完了

3、linux启动流程

4、自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。

第一步:编写service文件:
[Unit]
Description=Week4

[Service]
Type=forking
TimeoutStartSec=0
ExecStart=/bin/sh -c "/data/sh/week4.sh"

[Install]
WantedBy=multi-user.target
第二步:编写脚本:
#/bin/bash
`rm -rf ~/.ssh/known_hosts`
`rm -rf ~/.ssh/id_rsa*`
DATE=$(date +%Y-%b-%d-%H:%M)
USER=root
IP=192.168.234.143
PORT=33322
OS=`cat /etc/redhat-release  | awk -F ' ' '{print $1}'`
NUM=`ssh -p $PORT $USER@$IP 'ls /tmp | wc -l'`
FILE=`ssh -p $PORT $USER@$IP 'ls /tmp'`
        if [ $OS = CentOS -o $OS = Rocky ];then
            rpm -q sshpass || yum -y install sshpass
        else
            dpkg -i sshpass &> /dev/null || apt -y install sshpass
        fi

        if [ $OS = Centos -o $OS = Rocky ];then
            rpm -q expect || yum -y install expect
        else
            dpkg -i expect &> /dev/null || apt -y install expect
        fi

ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
expect <<EOF
spawn scp -P $PORT /root/.ssh/id_rsa.pub $USER@$IP:~/.ssh/authorized_keys
expect "yes/no"   {send "yes\r"}
expect "password" {send "xx..1027\r"}
expect "#"        {send "exit\r"}
EOF

if [ $NUM -ne 5 ];then
        echo  -e "$IP下的/tmp文件数量已改变,当前数量是$NUM,时间:$DATE" >> /data/record.log
fi
第三步:写完脚本后执行:
systemctl daemon-reload #重新加载service文件
systemctl start week4.service #启动服务
第四步:因为这是个脚本,虽然加到了服务中,但是只执行一次,完成后即退出。要想一直监控需要将其添加到定时任务中
1 9 * * * systemctl start week4.service #每天早上9点01分执行一次

5、awk常用命令

1、netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 #查找80端口请求数最高的前20个IP
2、ps -e -o stat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’ | xargs kill -9
#批量删除僵尸进程
3、cat access.log |awk '{print $1}'|sort|uniq -c |sort -nr |head -10 
#统计 Nginx 访问日志 访问量排在前10的ip地址
4、df | awk '{print $1,$5}' #取出分区和对应的利用率
5、ifconfig eth0 | awk '/netmask/{print $2}' #取出IP地址
   hostname -I | awk -F' ' '{print $1}' #取出IP地址

6、编译安装Linux内核

#下载linux内核 https://www.kernel.org/
#将下载的内核包上传到linux
yum -y install gcc make ncurses-devel flex bison openssl-devel 
elfutils-libelf-devel bc perl
tar xf linux-5.18.9.tar.xz -C /usr/local/src
cd /usr/local/src/linux-5.18.9
cp /boot/config-$(uname -r) .config
vim .config
#修改下面三行
# CONFIG_MODULE_SIG=y #注释此行
CONFIG_SYSTEM_TRUSTED_KEYS="" #修改此行
# CONFIG_DEBUG_INFO_BTF=y     #更改内核版本名称make menuconfigGeneral setup    Local version - append to kernel release  -m68 save make -j 8   
make modules_install
make install
reboot

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注