Linux计划,定制化服务,awk使用
Linux计划任务
要执行计划任务要确定crond.service有没开启。PS:一般情况下都要安装有crond。
[root@rocky ~]# systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-07-10 17:14:22 CST; 1s ago
Main PID: 21608 (crond)
Tasks: 1 (limit: 11045)
Memory: 1.0M
CGroup: /system.slice/crond.service
└─21608 /usr/sbin/crond -n
Jul 10 17:14:22 rocky.localdomain systemd[1]: Started Command Scheduler.
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) STARTUP (1.5.2)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 9% if used.)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (running with inotify support)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
周三3点的每分钟执行date
11月每天8,10,12点 执行脚本/app/bin/test.sh
周一至周五的1点30分备份/etc,到/backup/etcbak-yyyy-mm-dd-HH.tar.xz,其中日期是前一天的
每2小时把/proc/meminfo 的S和M开头的内容截取下来并存到/tmp/meminfo.txt文件中
每10分钟执行脚本
每天的每一小时查看本机的IP
每分钟查看内存使用状态
每天的23点把主机的IP的连接个数存放到/data/yyyy-mm-dd
每2个月的周一执行命令
周五每2小时执行top
[root@rocky ~]# crontab -l
* 3 * * 3 date
0 8-12/2 * 11 * bash /app/bin/test.sh
30 1 * * 1-5 cp -r /etc /backup/etcbak-`date -d '-1day' +%F-%H`.tar.xz
0 */2 * * * awk -F':' '/^S|^M/{print $1,$2}' /proc/meminfo > /tmp/meminfo.txt
*/10 * * * * bash /data/scripts2/check.sh
0 */1 * * * ip a
* * * * * free -h
0 23 */1 * * awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log-20230715 >> /data/`date +%F`
* * * */2 1 yum repolist
* */2 * * 5 top
进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。简单来说,当程序被执行时就是进程。
可以通过pstree -p来查看(XXX)为进程。
[root@rocky ~]# pstree -p
systemd(1)─┬─ModemManager(1181)─┬─{ModemManager}(1208)
│ └─{ModemManager}(1226)
├─NetworkManager(1102)─┬─{NetworkManager}(1112)
│ └─{NetworkManager}(1122)
├─VGAuthService(1108)
├─accounts-daemon(1385)─┬─{accounts-daemon}(1396)
│ └─{accounts-daemon}(1402)
├─alsactl(1092)
├─atd(1416)
├─auditd(1068)─┬─sedispatch(1070)
│ ├─{auditd}(1069)
│ └─{auditd}(1071)
├─automount(1393)─┬─{automount}(1417)
│ ├─{automount}(1418)
│ ├─{automount}(1519)
│ └─{automount}(1538)
├─avahi-daemon(1098)───avahi-daemon(1134)
├─chronyd(1117)
├─colord(2412)─┬─{colord}(2427)
│ └─{colord}(2434)
├─crond(21608)
├─cupsd(1383)
├─dbus-daemon(1101)
├─dmeventd(948)─┬─{dmeventd}(968)
│ └─{dmeventd}(969)
进程的状态
](D:\google下载\进程.png)
睡眠态:分为两种,可中断:interruptalble,不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵尸态:zombie,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭死态的子进程,或者恢复父进程。
内存
内存(Memory)是计算机的重要部件,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。
通过free 可以查看内存的使用状态。
[root@rocky /]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 1.0Gi 153Mi 11Mi 613Mi 588Mi
Swap: 2.0Gi 25Mi 2.0Gi
linux启动流程
POST:加电自检,是BIOS主要功能之一。对主板,CPU,内存,串并行接口,键盘等硬件情况的检测。
GRUB:引导加载器。
启动阶段:
- 1.0---MBR的前446个字节。
- 1.5---MBR之后的扇区让阶段1.0识别阶段2所在的分区上的文件系统
- 2.0---分区文件/boot/grub2
加载内核:加载硬件驱动程序,以只读方式挂载文件系统,运行用户空间的第一应用程序/sbin/init。
运行级别:7个级别(0-6),一般情况使用3或者5作为默认级别
0:关机
1:单用户模式
2:多用户模式
3:多用户模式,命令行界面。
4:预留级别
5:多用户模式,图形界面
6:重启
在Linux中,选择启动级别对应的执行脚本通常存储在/etc/rc.d/目录或/etc/init.d/目录中。在/etc/rc.d/或/etc/init.d/目录中,你可以找到以特定命名约定命名的脚本文件,如Sxxname或Kxxname,其中xx代表脚本的优先级。这些脚本用于启动(S)或停止(K)特定服务或功能。
[root@centos7 rc0.d]# cd /etc/rc.d/
[root@centos7 rc.d]# ls
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local
[root@centos7 rc.d]# cd rc5.d/
[root@centos7 rc5.d]# ls
K50netconsole S10network
定制化systemd服务
功能:定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
首先可以参考sshd服务的格式
[root@rocky scripts2]# systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
按照格式写入基本的信息
[root@rocky scripts2]# cat /lib/systemd/system/rsync.service
[Unit]
Description=check txt
[Service]
TimeoutStartSec=0
ExecStart=/data/scripts2/sysnc.sh
ExecStop=/bin/kill /data/scripts2/sysnc.sh
[Install]
WantedBy=multi-user.target
编写脚本:当tmp的文件个数发生变化时,就保存在/home/tmo.bak目录下。
[root@rocky scripts2]# cat sysnc.sh
#!/bin/bash
#mkdir /home/tmp.bak
now=$(cd /tmp;ls | wc -l)
count=$(cp -rf /tmp/* /home/tmp.bak && cd /home/tmp.bak && ls| wc -l)
echo count=$count
if [ $now -ne $count ];then
echo "this is tmp may be have change at `date +%F-%T`"
cp /tmp /var/log/`date +%F-%T`.tmp
fi
tail -f /etc/hosts
配置完成后,重新加载服务,设置开机自启,现在启用。
[root@rocky scripts2]# systemctl daemon-reload
[root@rocky scripts2]# systemctl enable --now rsync
[root@rocky scripts2]# systemctl status rsync
● rsync.service - check txt
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2023-07-17 13:10:01 CST; 1h 18min ago
Main PID: 36441 (sysnc.sh)
Tasks: 2 (limit: 11045)
Memory: 596.0K
CGroup: /system.slice/rsync.service
├─36441 /bin/bash /data/scripts2/sysnc.sh
└─36449 tail -f /etc/hosts
Jul 17 13:10:01 rocky.localdomain systemd[1]: Started check txt.
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36441]: count=18
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36449]: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36449]: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Linux内核的编译安装
首先在主机可以正常连外网情况下
进行wget下载,tar解压。
[root@rocky ~]# wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.4.3.tar.gz
[root@rocky ~]# tar xf linux-6.4.3.tar.gz
编译前,要安装
[root@rocky ~]# yum install gcc gcc-c++ make ncurses-devel openssl-devel flex bison elfutils-libelf-devel bc -y
进入目录执行 make menuconfig 进行编译,这里显然已经出现问题了(忘记装gcc-c++)😤
出现这个界面一般是先排查gcc的版本需要6及以上。然后在排查工具有没有装全。
进入界面,选择文件系统。
Overlayfs选项是跟docker相关
选好功能后选中Save
会在目录下生成 .config,此文件为隐藏文件需要用ls -a 才能看到该文件。接下来make编译,发现找不到此文件。
用yum provides查一下所需要的包
安装openssl-devel
装完在编译一次,发现又有包找不到
相同的办法用yum provides
再次输入make,发现这次报错没有显示缺少了什么文件。
打开.config把CONFIG_SYSTEM_TRUSTED_KEYS="certs/rocky.pem"里面的内容去掉
继续编译完成。
make modules_install
如果出现报错:将CONFIG_DEBUG_BTF=y修改成n
继续
最后执行 make install 就可以了,然后重启就能选择了。
awk使用场景
- 查看磁盘的使用情况
[root@rocky ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 883720 0 883720 0% /dev
tmpfs 914088 0 914088 0% /dev/shm
tmpfs 914088 42560 871528 5% /run
tmpfs 914088 0 914088 0% /sys/fs/cgroup
/dev/mapper/rl_rocky-root 83850240 42655012 41195228 51% /
/dev/sda1 1038336 265436 772900 26% /boot
/dev/sdb3 260966916 1852552 259114364 1% /mnt/bb
/dev/sdb4 104806400 763756 104042644 1% /mnt/cc
/dev/sdb2 52403200 398400 52004800 1% /mnt/aa
/dev/mapper/testvg0-lvmysql 8154552 36 7735484 1% /mnt/mysql
/dev/mapper/group-qa 782817 49 745069 1% /mnt/qa
/dev/mapper/rl_rocky-home 133071376 972300 132099076 1% /home
tmpfs 182816 36 182780 1% /run/user/0
/dev/sr0 11844638 11844638 0 100% /run/media/root/Rocky-8-7-x86_64-dvd
[root@rocky ~]# df | awk -F' +|%' '/^\/dev\/sd/{print $1,$5}'
/dev/sda1 26
/dev/sdb3 1
/dev/sdb4 1
/dev/sdb2 1
- 提取IP地址
[root@rocky scripts2]# ifconfig eth0 | awk '/netmask/{print $2}'
192.168.3.130
- 显示主机连接次数
[root@rocky httpd]# awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log-20230701
192.168.3.130 8
192.168.3.140 146
192.168.3.1 23
192.168.3.136 29
- 统计文件系统挂载类型个数
[root@rocky httpd]# awk -F' +' '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab
ext3 1
ext4 1
xfs 4
- 提取内存关键信息
[root@rocky httpd]# free -h|awk '/^Mem/{printf"已使用内存:%s\n当前空闲内存:%s\n内存使用率:%.2f%\n",$4,$3,$3/$2*100}'
已使用内存:103Mi
当前空闲内存:734Mi
内存使用率:43176.47%
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)