4、定时任务详解

本文详细介绍了如何设置10个定时任务示例,涵盖各种场景,深入剖析Linux进程与内存概念,并以图文形式展示启动流程。同时,讲解了如何使用systemd创建定时检查服务器文件的系统服务,以及Linux内核编译和安装步骤。最后,总结了五个awk在文本处理中的实用场景。
摘要由CSDN通过智能技术生成

定时任务常用总结、进程和内存、linux启动过程详解

实现目标:

  1. 自定义写出10个定时任务的示例:比如每周三凌晨三点执行data命令(要求尽量的覆盖各种场景)
  2. 图文并茂说明Linux进程和内存概念
  3. 图文并茂说明Linux启动流程
  4. 自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
  5. 写Linux内核编译安装博客
  6. 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。

定时任务常用总结

crontab命令的基本格式如下:

crontab [参数] [文件名]

参数功能对照表如下:

参数功能
-u指定用户
-e编辑某个用户的crontab文件内容
-l显示某个用户的crontab文件内容
-r删除某用户的crontab文件
-i删除某用户的crontab文件时需确认

以上参数,如果没有使用 -u 指定用户,则默认使用的当前用户。

通过 crontab -e 命令编辑文件内容,具体语法如下:

[分] [小时] [日期] [月] [星期] 具体任务

其中:

  • 分,表示多少分钟,范围:0-59
  • 小时,表示多少小时,范围:0-23
  • 日期,表示具体在哪一天,范围:1-31
  • 月,表示多少月,范围:1-12
  • 星期,表示多少周,范围:0-7,0和7都代表星期日

还有一些特殊字符,比如:

  • * 表示什么时间触发什么任务,比如: 1** 表示每天凌晨1点执行。
  • / 表示从哪一个时刻开始,每隔多长时间触发一次任务 ,或每隔多久执行一次,比如: */5 **** 表示每隔5分钟执行一次。
  • , 表示指定的时间触发任务,支持多个时间点执行任务,比如: 10 7,9,12 *** 表示在每天的7、9、12点10分各执行一次。
  • - 表示一段时间内触发任务,支持一个范围区间内执行任务,比如: 10 7-9 *** 表示在每天的7、8、9点10分各执行一次。
  • ? :表示用于月中的天和周中的天两个子表达式,表示不指定值

此外,顺便说一下 crontab 需要 crond 服务支持, crond 是 linux 下用来周期地执行某种任务的一个守护进程,在安装 linux 操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的。 crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务。

实例:
    0 0 0 1 * ? 每月1号零点执行
    0 0 2 * * ? 每天凌晨2点执行
    0 0 2 * * ? 每天凌晨2点执行
    0 0/5 11 * * ? 每天11点-11点55分,每隔5分钟执行一次
    0 0 18 ? * WED 每周三下午6点执行
    
    30 2 * * 1,3,5 shell 每个星期1、3、5
	30 2 * * 1-5 shell 工作日
	30 2 * * 0,6 shell 周末
	*/10 2 1,10,20 * 0,6  shell###默认是并且的关系,如果冲突就是或者关系 每个月的 1、10、20 或者周六日
#cron任务中不建议使用%,它有特殊用途,它表示换行的特殊意义,且第一个%后的所有字符串会被将当成作命令的标准输入,如果在命令中要使用%,则需要用 \ 转义
#每天2点30分对/etc目录进行备份
30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`
#每周的工作日23:00,执行/backup
0 23 * * 1-5  /backup
#周一到周五每天上午8:00 发送一封邮件给管理员 admin@qq.com
0 8 * * 1-5 mail -s "hi" admin@qq.com < /tmp/maildata
#每月1、10、20日的23:00执行/backup
0 23 1,10,20 * *   /backup
#每月10号的23:59执行/tmp下的test.sh脚本
59 23 10 * *  /tmp/test.sh
#早上5点到晚上11点之间,每隔2个小时清理/var/www/html目录一次
0 5-11/2 * * *  cat /dev/null > /var/www/html 
#每月1号的23点59秒重启http服务
59 23 1 * *  systemctl restart httpd
#每天早上8点到下午18点每隔2小时的每30分钟 查看系统时间
30 8-18/2 * * * date
#每天8点30分和18点30分执行/tmp下的test.sh脚本
30 8,18 * * * /tmp/test.sh
#11月30号23:59分重启主机
59 23 30 11 * reboot
#秒级别运行任务
#!/bin/bash
step=1  #间隔的秒数,不能大于60
for ((i=0;i<60;i=(i+step)));do
$(date>>/mnt/file)
sleep $step
done
exit 0
[root@localhost ~]# chmod +x test.sh
[root@localhost ~]# crontab -e

* * * * * sh /mnt/date.sh

进程和内存

进程

什么是进程?

进程的定义:系统将应用程序动态的运行起来的过程, 包含进程的创建,进程的运行以及进程消亡。(即程序的执行过程)

组成:进程由内存空间(程序代码、数据集合、进程空间、打开的文件)和一个或多个线程组成

  • 程序:是用于描述进程要完成的功能,是控制进程执行的指令集;
  • 数据集合:是程序在执行时所需要的数据和工作区;
  • 进程控制块(Program Control Block,简称PCB):包含进程的描述信息和控制信息,是进程存在的唯一标志。

分类:

  • 前台进程:跟终端相关,通过终端启动的进程
  • 后台进程(或守护进程):daemon,在系统引导过程中启动的进程,和终端无关进程

注意:两者可相互转化

特征:

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
  • 并发性:任何进程都可以同其他进程一起并发执行;
  • 独立性:进程是系统进行资源分配和调度的一个独立单位;
  • 结构性:进程由程序、数据和进程控制块三部分组成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tthg4lXc-1668398536890)(E:\2022.5.27\2022\N71作业\4、定时任务详解.assets\image-20221113162913977.png)]

image-20221113162752088

线程

什么是线程?

线程的定义:

  • 线程是一个进程中代码的不同执行路线
  • 线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。

组成:一个标准的线程

  • 线程ID
  • 当前指令指针(PC)
  • 寄存器
  • 堆栈

进程与线程的区别

  • 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  • 一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间);
  • 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;调度和切换:线程上下文切换比进程上下文切换要快得多。

内存

什么是内存?

内存的定义:是运行进程的空间,CPU待处理的数据和运行的程序暂时存储的空间。

linux启动过程详解

image-20221113164345595

grub功能和组成
bootloader:引导加载器,引导程序
Windows:ntloader,仅是启动OS
linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中的特定空间中,解压,展开,并把系统控制权移交给内核
linux的bootloader
lilo:linux loader,早期的bootloader,功能单一
grub:guand unified bootloader,centos 5,6 grub 0.97:grub legacy,centos 7以后使用grub 2.02
grub启动阶段
primary boot loader
1st stage :MBR的前446个字节
1.5 stage:MBR之后的扇区,让stage1中的BootLoader能识别stage2所在的分区上的文件系统
secondary bootloader:2nd stage,分区文件/boot/grub/

Centos 6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit 文件,重新挂载根文件系统
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc/d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以shell控制主机

centos 7启动流程

1.UEFi或BIOS初始化,运行POST开机自检
2.选择启动设备
3.引导装载程序,centos 7是grub2,加载装载程序的配置文件
        /etc/grub.d/
        /etc/default/grub
        /boot/grub2/grub.cfg
4.加载initramfs驱动模块
5.加载内核选项
6.内核初始化,centos 7使用systemd代替init
7.执行initrd.garget所有单元,包括挂载 /etc/fstab
8.从initramfs根文件系统切换到磁盘根目录
9.systemd执行默认target配置,配置文件/etc/systemd/system/default.target
10.systemd执行sysinit.target初始化系统及basic.target准备操作系统
11.systemd启动multi-user.target下的本机与服务器服务
12.systemd执行multi-user.target下的/etc/rc.d/rc.local
13.systemd执行multi-user.target下的getty.target及登录服务
14.systemd执行graphical需要的服务

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

可使用centos7以上版本中的系统自带的新工具,即“systemd-tmpfiles”,该工具提供了一种结构化且可配置的方法来管理临时目录和文件

#(1)查看服务是否启动成功
# systemctl status systemd-tmpfiles-*

#(2)启动systemd-tmpfiles-setup服务单元时,它将运行systemd-tmpfiles –create –remove命令,该命令将根据systemd自带的计时器单元会按照固定的时间频率触发systemd-tmpfiles-clean.service,当然我们也可以在/lib/systemd/system/下创建一个find.service服务来检查/tmp/下文件数的变化情况:

#vim /lib/systemd/system/find.service
[Unit]
Description=check tmp
[Service]
TimeoutStartSec=0
ExecStart=/bin/sh -c  "ssh root@10.255.18.16  sh /opt/check_tmp.sh"   #基于key验证
ExecStop=ps auxf | grep \/opt\/[check]_tmp.sh |awk '{print $2}' |xargs kill -9 2>/dev/null
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target

#基于key验证检查shell
# vim /opt/check_tmp.sh 
#!/bin/bash
set +x
base_dir=$(pwd)
ip_list='10.255.18.15,10.255.18.16'
USER='root'
PWD='123456'
INSTALL()
{
echo "开始导入public-key"
sleep 1s
for IP in `echo "${ip_list}"|awk -F, 'BEGIN{OFS=" "}{$1=$1;printf("%s",$0);}'`
 do
      sshpass -p ${PWD}  ssh-copy-id -o StrictHostKeyChecking=no ${USER}@${IP}
      echo "${IP}服务器完成"
done
}
INSTALL

#(3)随后再用如下命令正式开始服务即宣告完成,后面系统启动时加载systemd服务即可自动检查/tmp/目录下的文件数量变化状态。
systemctl daemon-reload
systemctl enable --now find.service
systemctl restart --now find.service
systemctl status  --now find.service  

写Linux内核编译安装博客

#先下载linux内核到服务器指定目录下https://www.kernel.org/
#wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.78.tar.xz
#安装必要的工具
#yum -y install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel bc perl
#解压源码包文件
#tar xvf linux-5.15.78.tar.xz -C /usr/local/src
cd /usr/local/src/linux-5.15.78
cp /boot/config-$(uname -r) .config
vim .config
#修改下面三行
# CONFIG_MODULE_SIG=y #注释此行
CONFIG_SYSTEM_TRUSTED_KEYS="" #修改此行
CONFIG_DEBUG_INFO_BTF=y     #更改内核版本名称

#make modules_install
#make installreboot

总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。

基本用法

awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理

awk命令格式如下

awk [-F field-separator] 'commands' input-file(s)
  • [-F 分隔符]是可选的,因为awk使用空格,制表符作为缺省的字段分隔符,因此如果要浏览字段间有空格,制表符的文本,不必指定这个选项,但如果要浏览诸如/etc/passwd文件,此文件各字段以冒号作为分隔符,则必须指明-F选项。
  • awk会根据分隔符将行分成若干个字段,$0为整行,$1为第一个字段,$2 为第2个字段,依次类推…(打印一个字段或所有字段,使用print命令)

image-20221114090701052

AWK的工作流程

  • 1.通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。
  • 2.完成 BEGIN 块的执行,开始执行body块。
  • 3.读入有 \n 换行符分割的记录。
  • 4.将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容), 1 表 示 第 一 个 域 , 1 表示第一个域, 1n 表示第 n 个域。
  • 5.依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
  • 6.循环读取并执行各行直到文件结束,完成body块执行。
  • 7.开始 END 块执行,END 块可以输出最终结果。

实例:

#场景1:剔除某列
比如将test.txt文件除了第2列的其他列都打印出来
# awk -F ":" '{$5="";print $0}' test.txt   

#场景2:打印倒数第n列  (也就是NF减去(n-1)的列)
比如打印倒数第3列
#awk -F '|' '{print $(NF-2)}'  test.txt

#场景3:
取出/etc/passwd文件中id小于等于5的用户和id号
#awk -F ":" '$3<5 {print $1,$3}'  /etc/passwd

#场景4:
#查询登录不成功的主机及次数
lastb |awk '{print $3}'|sort |uniq -c|sort -nr

#场景5:
#封掉查看访问日志中连接次数超过1000次的IP
awk '{ip[$1]++}END{for(i in ip){if(ip[i]>=1000) {system("iptables -A INPUT -s "i" -j REJECT")}}}' nginx.access.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fqssl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值