12.进程管理和计划任务

1 进程介绍

1.1 进程概念

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

1.2 系统进程状态

Linux系统进程的状态:

  • 运行态:running
  • 就绪态:ready
  • 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable
  • 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
  • 僵尸态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死 态 的子进程

1.3 进程优先级

普通进程的静态优先级:

  • nice值::-20到19,对应系统优先级100-139或99

实时优先级(动态优先级):

  • 99-0 值最大优先级最高

2 进程管理工具

2.1 pstree

查看进程树

格式:

 pstree   [OPTION] [ PID | USER ]

常用选项:

  • -p 显示PID
  • -T不显示线程数量,默认显示线程

范例:

[root@centos8 ~]$pstree -p user
bash(446775)───ping(446800)

2.2 ps

ps 即process state,可以进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关 信息均保存在/proc/PID目录下的各文件中

格式:

ps [options]

常用选项:

BSD风格选项

  • a 选项包括所有终端(tty)中的进程
  • x 所有无终端(tty)的进程
  • u 显示进程所有者的信息
  • f 显示进程树
  • k|--sort 对属性排序,属性前加 - 表示倒序
  • o 属性... 选项显示定制的属性信息:pid、cmd、%cpu

UNIX风格选项

  • -e 显示所有进程
  • -f 显示完整格式程序信息
  • -u 指定有效的用户ID或名称

GUN

  • --help 查看帮助
  • --sort 对属性排序相当于BSD k选项

ps输出属性

[root@centos8 ~]$ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          22  0.0  0.0      0     0 ?        SN    2020   0:00 [ksmd]

[root@centos8 ~]$ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root          10       2  0  2020 ?        00:02:42 [rcu_sched]

C : ps -ef 显示列 C 表示cpu利用率
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSident Size, 常驻内存集,即真正占用的内存
STAT: 进程状态
	R:running
 	S: interruptable sleeping
 	D: uninterruptable sleeping
 	T: stopped
	Z: zombie
 	+: 前台进程
 	l: 多线程进程
	L:内存分页并带锁
	N:低优先级进程
	<: 高优先级进程
	s: session leader,会话(子进程)发起者
 	I:Idle kernel thread,CentOS 8 新特性
ni: nice值
pri: priority 优先级
rtprio: 实时优先级
psr: processor CPU编号

常用组合:

aux	相比-ef该选项显示cpu%值更详细
-ef	
-eFH

范例:

[root@centos8 ~]$ps auxf
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           2  0.0  0.0      0     0 ?        S     2020   0:01 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<    2020   0:00  \_ [rcu_gp]

按CPU利用率倒序排序centons6以下版本不支持

[root@centos8 ~]$ps axo pid,cmd,%cpu,%mem k -%cpu
    PID CMD                         %CPU %MEM
 334445 /usr/local/aegis/aegis_clie  0.5  3.1
      1 /usr/lib/systemd/systemd --  0.0  0.6
      2 [kthreadd]                   0.0  0.0
      3 [rcu_gp]                     0.0  0.0

范例:实现进程和CPU的绑定

[root@centos8 ~]#taskset --help
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]

2.3 prtstat

显示详细的进程信息

格式:

prtstat [options] PID ...

选项:

-r raw格式显示

[root@centos8 ~]$prtstat -r 446775
         pid: 446775         	                  comm: bash
       state: S              	                  ppid: 446774
        pgrp: 446775         	               session: 446742
      tty_nr: 34817          	                 tpgid: 446852
       flags: 400100         	                minflt: 1320
     cminflt: 2894           	                majflt: 0
     cmajflt: 0              	                 utime: 1
       stime: 0              	                cutime: 0
      cstime: 15             	              priority: 20
        nice: 0              	           num_threads: 1
 itrealvalue: 0              	             starttime: 1017091513
       vsize: 24870912       	                   rss: 1245
      rsslim: 18446744073709551615	             startcode: 94494540193792
     endcode: 94494541273016 	            startstack: 140731806454160
     kstkesp: 0              	               kstkeip: 0
       wchan: 0              	                 nswap: 0
      cnswap: 0              	           exit_signal: 17
   processor: 0              	           rt_priority: 0
      policy: 0              	 delayaccr_blkio_ticks: 0
  guest_time: 0              	           cguest_time: 0

2.4 nice和renice

nice

以指定的优先级来启动进程

格式:

nice [OPTION] [COMMAND [ARG]...]

选项:

  • -n 指定优先级值,默认值为10

renice

调整正在执行进程的优先级

格式:

renice [-n] priority pid...

范例:

[root@centos8 ~]$nice -n -20 ping 127.1.1.1
[root@centos8 ~]$ps axo pid,cmd,nice | grep ping | grep -v grep
 447048 ping 127.1.1.1              -20

2.5 pgrep

按照条件搜索进程,也可以使用ps 选项 | grep 'pattern'搜索

pidof可以根据程序名称查看进程pid

格式:

pgrep [options] pattern

常用选项:

  • -u uid:生效者
  • -U uid:进程发起者
  • -p pid 显示指定进程的子进程

范例:

[root@centos8 ~]$pgrep -au user
447081 -bash
447115 bc

pidof查看pid

[root@centos8 ~]#pidof bash
19035 18813 18789 1251
[root@centos8 ~]#pidof ping.sh
[root@centos8 ~]#pidof -x ping.sh
19035

2.6 uptime

显示以下内容

  • 当前系统时间
  • 系统已经启动时间
  • 系统在线用户数量
  • 系统1分钟、5分钟和15分钟平均负载,建议超过5时告警

范例:

[root@centos8 ~]$uptime
 18:04:35 up 117 days, 18:50,  3 users,  load average: 0.00, 0.00, 0.00
[root@centos8 ~]$w
 18:04:45 up 117 days, 18:51,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    49.118.73.132    16:26    0.00s  0.10s  0.00s w
root     pts/1    49.118.73.132    16:28   12:05   0.02s  0.02s -bash
root     pts/2    49.118.73.132    17:05    4:37   0.03s  0.00s bc

2.7 top

查看实时的进程状态

h或?可以查看帮助,q或esc退出帮助

  • 排序

    P:以占据的CPU百分比,%CPU

    M:以占据内存的百分比,%MEM

    T:累计占据CPU时长,TIME+

  • 首部信息显示

    uptime信息:l

    tasks及cpu信息:t

    cpu分别显示:1

    memory信息:m

  • 终止指定进程:k

  • 保存文件:W

选项:

  • -d # 指定刷新的时间间隔,默认为3秒
  • -n # 刷新多少次以后退出

2.8 free

显示内存空间使用状态

格式:

free [OPTION]

常用选项:

  • -b 以字节为单位
  • -m 以MB为单位
  • -g 以GB为单位

2.9 pmap

查看进程对应内存映射

格式:

pmap [options] pid [...]

cat /proc/PID/maps

范例:

#查看系统调用
[root@centos8 ~]$strace ls
execve("/usr/bin/ls", ["ls"], 0x7ffec1f150f0 /* 24 vars */) = 0
brk(NULL)                               = 0x55607ac10000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffd1a4a9aa0) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=31690, ...}) = 0
mmap(NULL, 31690, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f96cc1c5000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240z\0\0\0\0\0\0"..., 832) = 832
lseek(3, 157536, SEEK_SET)              = 157536
read(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32
fstat(3, {st_mode=S_IFREG|0755, st_size=304848, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f96cc1c3000
lseek(3, 157536, SEEK_SET)              = 157536
read(3, 

2.10 虚拟内存信息vmstat

格式:

vmstat [options] [delay [count]] 

显示说明:

procs:
 r:可运行(正运行或等待运行)进程的个数,和核心数有关
 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
 swpd: 交换内存的使用总量
 free:空闲物理内存总量
 buffer:用于buffer的内存总量
 cache:用于cache的内存总量
swap:
 si:从磁盘交换进内存的数据速率(kb/s)
 so:从内存交换至磁盘的数据速率(kb/s)
io:
 bi:从块设备读入数据到系统的速率(kb/s)
 bo: 保存数据至块设备的速率
system:
 in: interrupts 中断速率,包括时钟
 cs: context switch     进程切换速率
cpu:
 us:Time spent running non-kernel code
 sy: Time spent running kernel code
 id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
 wa: Time spent waiting for IO. 2.5.41前,包括in idle.
 st: Time stolen from a virtual machine. 2.6.11前, unknown.

2.12 统计CPU和设备IO信息iostat

范例:

[root@centos8 ~]$iostat
Linux 4.18.0-193.14.2.el8_2.x86_64 (centos8.2) 	03/14/2021 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.44    0.02    0.47    0.01    0.00   99.07

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.28         0.06         3.04     618723   31981155

2.13 系统资源统计 dstat

dstat由pcp-system-tools包提供,用于代替 vmstat,iostat功能

格式:

dstat [-afv] [options..] [delay [count]]

常见选项:

  • -c 显示cpu相关信息
  • -d 显示disk相关信息
  • -m 显示memory相关统计数据

2.14 监视磁盘I/O iotop

格式:

iotop [OPTIONS]

常见选项:

  • -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1
  • -u USER, --user=USER指定监测某个用户产生的I/O
  • -P, --processes仅显示进程,默认iotop显示所有线程

交互按键

left和right方向键:改变排序

r:反向排序

o:切换至选项--only

p:切换至--processes选项

a:切换至--accumulated选项

q:退出

i:改变线程的优先级

2.15 显示网络带宽使用情况iftop

通过EPEL源安装

2.16 查看网络实时吞吐量nload

nload 是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况,通过EPEL源安装

界面操作 上下方向键、左右方向键、enter键或者tab键都就可以切换查看多个网卡的流量情况

按 F2 显示选项窗口

按 q 或者 Ctrl+C 退出 nload

2.17 查看进程打开文件 lsof

查看当前系统文件的工具

格式:

lsof [options] [args]

常见选项:

  • -a:列出打开文件存在的进程
  • -c<进程名>:列出指定进程所打开的文件
  • -g:列出GID号进程详情
  • -d<文件号>:列出占用该文件号的进程
  • +d<目录>:列出目录下被打开的文件
  • -p<进程号>:列出指定进程号所打开的文件
  • -u:列出UID号进程详情
  • -i<条件>:列出符合条件的进程(4、6、协议、:端口、 @ip )

范例:

[root@centos8 ~]$lsof -i:22
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd       976 root    5u  IPv4   24095      0t0  TCP *:ssh (LISTEN)

[root@centos8 ~]$lsof -c bc
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
bc      456068 user  cwd    DIR  253,1       83 100723329 /home/user
bc      456068 user  rtd    DIR  253,1      287       128 /
bc      456068 user  txt    REG  253,1    97256  34099041 /usr/bin/bc
bc      456068 user  mem    REG  253,1    36824  50333368 /usr/lib64/libdl-2.28.so
bc      456068 user  mem    REG  253,1  4176104  50333366 /usr/lib64/libc-2.28.so
bc      456068 user  mem    REG  253,1   208616  50333269 /usr/lib64/libtinfo.so.6.1
bc      456068 user  mem    REG  253,1   216912  50333259 /usr/lib64/libncurses.so.6.1
bc      456068 user  mem    REG  253,1   338648  50333641 /usr/lib64/libreadline.so.7.0
bc      456068 user  mem    REG  253,1   302552  50333359 /usr/lib64/ld-2.28.so
bc      456068 user  mem    REG  253,1   337024  16780403 /usr/lib/locale/en_US.utf8/LC_CTYPE
bc      456068 user  mem    REG  253,1    26998  16780842 /usr/lib64/gconv/gconv-modules.cache
bc      456068 user    0u   CHR  136,1      0t0         4 /dev/pts/1
bc      456068 user    1u   CHR  136,1      0t0         4 /dev/pts/1
bc      456068 user    2u   CHR  136,1      0t0         4 /dev/pts/1

#使用lsof恢复使用中误删除的文件
lsof |grep /var/log/messages
rm -f /var/log/messages
lsof |grep /var/log/messages
cat /proc/653/fd/6
cat /proc/653/fd/6 > /var/log/messages

2.18 信号发送 kill

格式:

kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name

常用选项:

  • -SIGNAL
  • -u uid: effective user,生效者
  • -U uid: real user,真正发起运行命令者
  • -t terminal: 与指定终端相关的进程
  • -P pid: 显示指定进程的子进程

常用信号:

  • 1)SIGHUP 无须关闭进程而让其重读配置文件
  • 2)SIGINT 中止正在运行的进程;相当于Ctrl+c
  • 3)SIGQUIT 相当于ctrl+\
  • 9)SIGKILL 强制杀死正在运行的进程
    1. SIGTERM 终止正在运行的进程,默认信号
    1. SIGCONT 继续运行
    1. SIGSTOP 后台休眠

指定信号的方法 :

  • 信号的数字标识:1, 2, 9
  • 信号的简写名称:HUP,hup
  • 信号完整名称:SIGHUP,sighup

范例:

#利用 0 信号实现进程的健康性检查
[root@centos8 ~]#man kill
If signal is 0, then no actual signal is sent, but error checking is still
performed.

[root@centos8 ~]#killall -0 ping
[root@centos8 ~]#echo $?
0
#此方式有局限性,即使进程处于停止或僵尸状态,此方式仍然认为是进程是健康的

2.19 作业管理

Linux的作业控制

  • 前台作业:通过终端启动,且启动后一直占据终端
  • 后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
进程作业管理

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台 后,剥离与终端的关系可以采用如下方式:

  • nohup COMMAND &>/dev/null &
  • screen;COMMAND
  • tmux;COMMAND

使用jobs命令可以查看当前终端所有作业

2.20 并行执行任务

利用后台执行,可以实现多个进程同时执行功能,从而提高执行效率,下面介绍3中方法。

方法一:

#在多个脚本后添加&符号实现并行执行多个脚本
[root@centos8 ~]$cat all.sh
f1.sh&
f2.sh&
f3.sh&

方法二:

(f1.sh&);(f2.sh&);(f3.sh&)

方法三:

f1.sh&f2.sh&f3.sh&

范例:

#利用&实现同时ping多个地址
[root@centos8 ~]$ping 127.1.1.1&ping 127.1.1.2
[1] 456646
PING 127.1.1.2 (127.1.1.2) 56(84) bytes of data.
64 bytes from 127.1.1.2: icmp_seq=1 ttl=64 time=0.020 ms
PING 127.1.1.1 (127.1.1.1) 56(84) bytes of data.

注意:由于使用&会使得进程进入后台运行,所以ctrl+c不能停止上例中进程,可以使用killall ping才可以结束

3 任务计划

任务计划就是让系统自动的按照时间或周期性执行任务,计划任务又分为一次性任务和周期性任务。

3.1 一次性任务

at:用于设定未来某个时间只执行一次的任务

格式:

at [option] TIME
Files:
		/var/spool/at				#at队列存放位置
      /etc/at.allow				#白名单:默认不存在,只有该文件中的用户才能执行at命令
      /etc/at.deny				#黑名单:y 默认存在,拒绝该文件中用户执行at命令
notes:		
		执行任务时PATH变量的值和当前定义任务的用户身份一致
		
		atd服务启动时才能实现at任务
		
		若/etc/at.deny,/etc/at.allow文件都不存在,只有 root 可以执行 at 命令allow优先级高于deny,当两个文		  件中都有同一个用户时,allow文件生效

常见选项:

  • -l 列出指定队列中等待运行的作业;相当于atq
  • -d 删除指定的作业;相当于atrm
  • -c 查看具体作业任务
  • -f /path/file 指定的文件中读取任务
  • -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出

时间格式:

HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
02:00 

HH:MM YYYY-MM-DD   规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2016-09-20 

HH:MM[am|pm] + number [minutes|hours|days|weeks], 在某个时间点再加几个时间后才进行该
项任务
now + 5 min
02pm + 3 days

执行方式:

  • 默认交互式执行
  • 也可以配合管道符进行输入重定向
  • -f 选项支持从文件读取

3.2 周期性任务计划 cron

cron任务分为

  • 系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件
  • 用户cron任务:保存在 /var/spool/cron/USERNAME,利用 crontab 命令管理

cron的日志位于:/var/log/cron

注意:cron 依赖于crond服务,确保crond守护处于运行状态

3.2.1 系统cron计划任务

通过编辑/etc/crontab来制定系统计划任务

[root@centos8 ~]$cat /etc/crontab 
SHELL=/bin/bash								#shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin		#若任务使用相对路径环境变量内的任务才能找到并被执行
MAILTO=root										#发送邮件用户
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

时间指定方式说明:
					* 			给定时间点上有效取值范围内的所有值
					#,#,#		离散时间值
					#-#		连续时间取值
					/#			在指定时间范围上,定义步长
example:
			#每晚21:10分使用user用户输出"Howdy!"
			10 21 * * * user /bin/echo "Howdy!"
			
			##每3小时echo和wall命令
			0 */3 * * * user /bin/echo “howdy”; wall “welcome!”
3.2.2 用户计划任务

格式:

crontab [-u user] file
Files:
		/var/spool/cron/		#用户专用的cron任务文件
		/etc/cron.allow		#白名单作用于at类似
		/etc/cron.deny			#黑名单作用于at类似		
notes:
		crond是crontab的守护进程,执行crontab前请确保crond处于运行状态
		
		默认标准输出和错误会被发邮件给对应的用户,如:user创建的任务就发送至user的邮箱
		
		用户的cron 中默认 PATH=/usr/bin:/bin,如果使用其它路径,在任务文件的第一行加PATH=/path

常见选项:

  • -l 列出所有任务
  • -e 编辑任务
  • -r 移除所有任务
  • -i 同-r一同使用,以交互式模式移除指定任务
  • -u user 仅root可运行,指定用户管理cron任务

注意:运行结果的标准输出和错误以邮件通知给相关用户

​ cron任务中不建议使用%,它有特殊用途,它表示换行的特殊意义,且第一个%后的所有字符串会被将 成 当作命令的标准输入

范例:时间之间关系

[root@centos8 ~]#man 5 crontab
         Note: The day of a command's execution can be specified in the following two
         fields — 'day of   month', and 'day of week'. If both fields are restricted
         (i.e., do not contain the "*" character), the command will be run when either
         field matches the current time. 

example:
			30 4 1,15 * 5 user /bin/echo "Howdy!"
			#上面在每月1-15日和每周五都会执行

范例:让系统默认使用vim打开编辑任务文件

[root@centos8 ~]$ cat /etc/profile.d/env.sh
	export EDITOR=vim

思考:如果计划任务期间关机了,开机后任务还会执行么?

anacron

若计划任务期间系统处于关机状态,会 anacron来确保开机后自动执行未执行的计划任务由/etc/cron.hourly/0anacron执行,当执行任务时,更新/var/spool/anacron/cron.daily 文件的时间戳

配置文件:/etc/anacrontab 负责执行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务

使用man 5 anacrontab查看/etc/anacrontab详细说明

3.2.3 sleep

延迟命令执行时间,以秒为单位,可以实现在秒级别运行任务

格式:

sleep NUMBER[SUFFIX]
SUFFIX:
		 s: 秒, 默认
		 m: 分
		 h: 小时
		 d: 天
3.2.4 管理临时文件

CentOS 7 使用 systemd-tmpfiles-setup服务实现

CentOS 6 使用/etc/cron.daily/tmpwatch定时清除临时文件

配置文件

/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
3.2.5 练习

1.显示统计占用系统内存最多的进程,并排序

[root@centos8 ~]$ps axo pid,cmd,%cpu,%mem,rss --sort -rss
    PID CMD                         %CPU %MEM   RSS
 334445 /usr/local/aegis/aegis_clie  0.5  3.1 58980
 556 /usr/lib/systemd/systemd-jo  0.0  2.4 44936
 808 /usr/libexec/sssd/sssd_nss   0.0  2.0 38296
 880 /usr/libexec/platform-pytho  0.0  1.5 28588
 718 /usr/lib/polkit-1/polkitd -  0.0  1.2 23116

2.编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"sucess!",若ping不通则输出"fail!"

#for循环实现方式
[root@centos8 script]$cat for_ping.sh 
#!/bin/bash
for ip in {1..254};do
   {
    ping -c1 192.168.0.$ip > /dev/nvll && echo 192.168.0.$ip connect sucess! || echo 192.168.0.$ip connect fail!
    }&
done
   wait

#while循环实现方式
[root@centos8 script]$cat while_ping.sh 
#!/bin/bash
i=1
while [ $i -lt 255 ];do
    ( ping -c1 192.168.0.$i > /dev/null && echo 192.168.0.$i connect sucess! || echo 192.168.0.$i connect fail! )&
    i=$[i+1]
done

3.每周工作日1:30,将/etc备份至/backup目录中,保存文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

[root@centos8 script]$cat backup.sh 
#!/bin/bash
tar -jcf /backup/"etcbak-`date -d '-1day' +%F-%H`.tar.xz" /etc/

[root@centos8 data]$crontab -l
30 1 * * 1-5 /data/script/backup.sh

4.工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就发送邮件报警

[root@centos8 data]$crontab -l
/10 * * * 1-5 /data/script/check_disk
[root@centos8 ~]$cat /data/script/check_disk.sh 
#!/bin/bash
threshold=5
df -h | sed -rn '/^\/dev\//s#^([^ ]+).*([0-9]+)%.*#\1 \2#p' | while read Device Use;do
    [ $Use -gt $threshold ] && echo "$Device will be full,USE:$Use" | mail -s diskfull root
done
posted @ 2021-03-16 19:29  bestvae  阅读(189)  评论(1编辑  收藏  举报