• 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, "177ELF2113>1240z"..., 832) = 832
    lseek(3, 157536, SEEK_SET)              = 157536
    read(3, "4205GNU230043", 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
    
  • 相关阅读:
    第7 章 : 应用编排与管理:Job & DaemonSet
    第6 章 : 应用编排与管理:Deployment
    第5 章 : 应用编排与管理:核心原理
    第4 章 : 理解 Pod 和容器设计模式
    第3 章 : Kubernetes 核心概念
    第2 章 : 容器基本概念
    第1 章 : 第一堂“云原生”课
    阿里云原生技术公开课程-讲师记录及视频链接
    Shell中的(),{}几种语法用法-单独总结
    折腾kubernetes各种问题汇总-<1>
  • 原文地址:https://www.cnblogs.com/bestvae/p/14545385.html
Copyright © 2020-2023  润新知