Linux进程管理和计划任务

进程管理篇

进程概念

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

Process: 运行中的程序的一个副本,是被载入内存的一个指令集合

    进程ID(Process ID,PID)号码被用来标记各个进程

    UID、GID、和SELinux语境决定对文件系统的存取和访问权限,

    通常从执行进程的用户来继承

    存在生命周期

task struct:Linux内核存储进程信息的数据结构格式

task list:多个任务的的task struct组成的链表

进程创建:

    init:第一个进程

        父子关系

    进程:都由其父进程创建,CoW

        fork(), clone()

进程优先级

    系统优先级:数字越小,优先级越高

        0-139(CentOS4,5)

            各有140个运行队列和过期队列

        0-98,99(CentOS6)

    实时优先级:99-0:值最大优先级最高

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

Big O:时间复杂度,用时和规模的关系

    O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

进程相关概念

进程内存:

    Page Frame: 页框,用存储页面数据,存储Page 4k

    LRU:Least Recently Used 近期最少使用算法,释放内存

    物理地址空间和线性地址空间

    MMU:Memory Management Unit负责转换线性和物理地址

IPC: Inter Process Communication

    同一主机上

        signal

        shm: shared memory

        semophore信号量,一种计数器

    不同主机上:

        rpc: remote procedure call

        socket: IP和端口号

进程状态

Linux内核:抢占式多任务

进程类型:

    守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程

    前台进程:跟终端相关,通过终端启动的进程

    注意:两者可相互转化

进程状态:

    运行态:running

    就绪态:ready

    睡眠态:

        可中断:interrup table

        不可中断:uninterruptable

    停止态:stopped,暂停于内存中,但不会被调度,除非手动启动

    僵死态:zombie,结束进程,父进程结束前,子进程不关闭

系统管理工具

进程的分类:

    CPU-Bound:CPU密集型,非交互

    IO-Bound:IO密集型,交互

Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

pstree命令:以树状的方式显示进程

    pstree-display a tree of processes

    -p 显示进程编号

示例:

以树状可以很清晰看见进程跟进程之间的关系

wKiom1fdMUTjCyaYAABeqQp2ReQ600.png

连进程编号一起显示

wKioL1fdMUTi3zijAAA7OZdG7GA798.png

ps命令: process state 显示进程状态

    ps-report a snapshot of the current processes

    Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

列举进程ps

适用ps来查看进程信息

    ps [OPTION]…

支持三种选项:

    UNIX选项如-A -e

    BSD选项如a

    GUN选项如–help

默认显示当前终端中的进程

    a 选项包括所有终端中的进程

    x 选项包括不链接终端的进程

    u 选项显示进程所有者的信息

    f 选项显示进程的父进程

    o 属性… 选项显示定制的信息:

       pid、comm、%cpu、%mem、state、tty、euser(EffectiveUser)、ruser(RealUser)

示例1:ps的常用选项使用

VSZ:许诺使用内存

RSS:实际使用内存

wKiom1fdMYrDE6GPAABVtszCQv8068.png

示例2:指定查看相关的进程信息

假设wan用户在修改密码,此时passwd会用到SUID的权限

wKiom1fdMYzg5sMoAAARjv3BGhU289.png

此时用root账号查看账号可以看见,此处可以看euser是root,ruser是wan,此处体现了SUID的作用了

wKioL1fdMY2gC5u9AAASqHAkiA4935.png

假如只通过ps直接查看该进程的时候,只会显示euser的用户,但是该进去实际用户是wan

wKiom1fdMY6RVKuKAAAarT6oxOc038.png

进程管理工具

VSZ: Virtual memory SiZe,虚拟内存集,线性内存,许诺使用内存,

RSS: ReSidentSize, 常驻内存集,实际使用内存

STAT:进程状态

    R:running 正在运行

    S: interrup table sleeping

    D: uninterrup table sleeping

    T: stopped

    Z: zombie

    +: 前台进程

    l: 多线程进程

    N:低优先级进程

    <: 高优先级进程

    s: session leader,会话(子进程)发起者

常用组合:-ef

    -e: 显示所有进程

    -f: 显示完整格式程序信息

常用组合:-eFH

    -F: 显示更完整格式的进程信息

    -H: 以进程层级格式显示进程相关信息

常用组合:自定义

    -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

    axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

进程优先级分类

ni: nice 值,普通优先级,值越低优先级越高

pri: priority 优先级,进程优先级,数值越大优先级越高

psr: processor CPU编号

rtprio: 实时优先级

wKioL1fdMeTx71WwAABfWXwdR4w209.png

CentOS 6优先级关系对应表,越左边的优先级越高,越右边的优先级越低

wKiom1fdMfbSxmyRAAqnXRcLyq0808.png

CentOS 4和5优先级关系对应表,越左边的优先级越高,越右边的优先级越低

wKiom1fdMgHzdEu4AAbPvnsXJQ0275.png


搜索进程

最灵活:ps 选项 |  其它命令

按预定义的模式:pgrep

    pgrep [options] pattern

        -u uid: effective user,生效者

        -U uid: real user,真正发起运行命令者

        -t terminal: 与指定终端相关的进程

        -l: 显示进程名

        -a: 显示完整格式的进程名

        -P pid: 显示指定进程的子进程

示例:搜索指定进程

wKioL1fdMjHTEM6rAAApyjS8SvM082.png

按确切的程序名称:/sbin/pidof

    pidof bash

示例:搜索指定进程的pid

wKiom1fdMjKRAhWrAAAKj-v8UlA032.png

uptime命令

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载

系统平均负载:(1、5、10分钟的平均负载,一般不会超过1)

    指在特定时间间隔内运行队列中的平均进程数。

如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。

Linux进程管理和计划任务

top命令

选项:

    -d #: 指定刷新时间间隔,默认为3秒

    -b: 以批次方式

    -n #: 显示多少批次

有许多内置命令:

排序:

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

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

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

首部信息显示:

    uptime信息:l命令

    tasks及cpu信息:t命令

    cpu分别显示:1 (数字)

    memory信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k

保存文件:W

栏位信息简介

us:用户空间

sy:内核空间

ni:调整nice时间

id:空闲

wa:等待IO时间

hi:硬中断

si:软中断(模式切换)

st:虚拟机偷走的时间

栏位信息简介

PID (Process Id):任务的进程ID

PPID (Parent Process Pid):父任务的进程ID

RUSER (Real User Name):任务的所有者真实名称

UID (User Id):任务所有者ID

USER (User Name):任务所有者名称

GROUP (Group Name):任务所有者群组名

TTY (Controlling Tty):终端

PR (Priority):优先级

%CPU (CPU usage):CPU使用率

%MEM (Memory usage (RES)):内存使用率

S (Process Status):进程状态

TIME+ (CPU Time, hundredths):CPU时间,精确到秒

wKioL1fdMmfDjO0jAAC2J4isZBs894.png


htop命令:需从Fedora-EPEL源安装

选项:

    -d #: 指定延迟时间;

    -u UserName: 仅显示指定用户的进程;

    -s COLUME: 以指定字段进行排序;

子命令:

    s: 跟踪选定进程的系统调用;

    l: 显示选定进程打开的文件列表;

    a:将选定的进程绑定至某指定CPU核心;

    t: 显示进程树

wKioL1fdMpHQiwLXAADjBk3GydY926.png

F1-F10选项

F3直接搜索进程

wKiom1fdMpOg8QlqAADWIyxnxgU173.png

F9发送kill命令,默认级别是15

wKioL1fdMpXiXx-hAAEDLzSN7ME166.png


vmstat命令:查看虚拟内存信息

    vmstat [options] [delay [count]]

        -s 内存信息汇总

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.

示例1:vmstat 2 5 两秒一次,显示5次

wKiom1fdMuiDqqasAABG4qGx-Eg459.png

示例2:查看内存汇总信息

wKiom1fdMuvDN_oGAABl-9Fy3jg941.png

示例3:dd if=/dev/sda of=/dev/null 测试硬盘读数据,并且监控

wKioL1fdMuzAGmqCAAAaoFRhWc0966.png

可以看见io bi暴增,假如系统的io值过高,这个时候就需要查看是系统哪个进程占用大量的io了

wKiom1fdMu7CHSsuAACqvGi2XWk442.png

示例4:dd if=/dev/zero of=f1       测试硬盘写数据,并且监控

wKioL1fdMu6hYovdAAAaVjKhpjk783.png

可以看见io bo暴增,假如系统的io值过高,这个时候就需要查看是系统哪个进程占用大量的io了

wKiom1fdMvDBofVcAACgZnPGONE989.png

注意:示例3和示例4都是测试磁盘吞吐量

如果io比较大,可以看看是哪个程序产生那么大的io,磁盘io太大的话会带来系统的负载偏大

pmap命令:进程对应的内存映射

pmap [options]  pid […]

    -x: 显示详细格式的信息;

示例:pmap 1

wKioL1fdMzqim4DNAADGJsmHMjw720.png

另外一种实现:

cat /proc/PID/maps

wKiom1fdMz3QQFalAAE_WDdlvrc482.png

glances命令:glances – A cross-platform curses-based monitoring tool (EPEL源安装)

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]

常用选项:

    -b: 以Byte为单位显示网卡数据速率

    -d: 关闭磁盘I/O模块

    -f /path/to/somefile: 设定输入文件位置

    -o {HTML|CSV}:输出格式

    -m: 禁用mount模块

    -n: 禁用网络模块

    -t #: 延迟时间间隔

    -1:每个CPU的相关数据单独显示

内建命令:

    a Sort processes automatically

    l Show/hide logs

    c Sort processes by CPU%

    b Bytes or bits for network I/O

    m Sort processes by MEM%

    w Delete warning logs

    p Sort processes by name

    x Delete warning and critical logs

    i Sort processes by I/O rate

    1 Global CPU or per-CPU stats

    d Show/hide disk I/O stats

    h Show/hide this help screen

    f Show/hide file system stats

    t View network I/O as combination

    n Show/hide network stats

    u View cumulative network I/O

    s Show/hide sensors stats

    q Quit (Esc and Ctrl-C also work)

    y Show/hide hddtempstats

C/S模式下运行glances命令

服务模式:

    glances -s -B IPADDR

    IPADDR: 指明监听的本机哪个地址

客户端模式:

    glances -c IPADDR

    IPADDR:要连入的服务器端地址

示例1:通过glances观察网络流量

wKioL1fdM4yiA235AAE0P7txEUc019.png

此刻向10.1.156.68的主机发送大量的ping包

wKiom1fdM43i8QnUAAAVv0AamDs952.png

可以看见eth0的接口的流量飙升

wKiom1fdM4-yFeoiAAE4CHh11eg932.png


示例2:通过c/s模式监控网络流量

首先服务端开启glances服务

wKioL1fdM5Dj2glIAAAQuiyWNVM510.png

从客服端开启监控服务

wKiom1fdM5DDrWdvAAALejgqh0E669.png

已经链接上了

wKioL1fdM5PywZ6vAAFMwMSMWB0686.png

这个时候从一个端口向服务端发送大流量包,然后再观察流量,可以看见网络流量有明显的变化

wKioL1fdM5WwBWgLAAFbt6f8EPk240.png


dstat命令:系统资源统计

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

    -c: 显示cpu相关信息

        -C #,#,…,total

    -d: 显示disk相关信息

        -D total,sda,sdb,…

    -g:显示page相关统计数据

    -m: 显示memory相关统计数据

    -n: 显示network相关统计数据

    -p: 显示process相关统计数据

    -r: 显示io请求相关的统计数据

    -s: 显示swapped相关的统计数据

    –tcp

    –udp

    –unix

    –raw

    –socket

    –ipc

    –top-cpu:显示最占用CPU的进程

    –top-io: 显示最占用io的进程

    –top-mem: 显示最占用内存的进程

    –top-latency: 显示延迟最大的进程

示例:用dstat监控网络流量

当网络端口接收到流量的时候,net的监控端的流量会发生明显的变化

wKiom1fdM9eS9Ol2AACHx-JKYfo564.png

kill命令

向进程发送控制信号,以实现对进程管理

显示当前系统可用信号:kill -l

常用信号:man 7 signal

    1) SIGHUP: 无须关闭进程而让其重读配置文件

    2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

    9) SIGKILL: 杀死正在运行的进程

    15) SIGTERM:终止正在运行的进程

    18) SIGCONT:继续运行

    19) SIGSTOP:后台休眠

指定信号的方法:

    (1) 信号的数字标识;1, 2, 9

    (2) 信号完整名称;SIGHUP

    (3) 信号的简写名称;HUP

按PID:kill [-SIGNAL] pid…

按名称:killall[-SIGNAL] comm…

按模式:pkill[options] pattern

    -SIGNAL

    -u uid: effective user,生效者

    -U uid: real user,真正发起运行命令者

    -t terminal: 与指定终端相关的进程

    -l: 显示进程名

    -a: 显示完整格式的进程名

    -P pid: 显示父进程为此处指定的进程的进程列表

示例1:正常关闭掉进程

kill命令指定进程号杀掉进程,默认的级别是15

wKioL1fdNCDyuhVlAABJhB8HsiU667.png

此时此进程已经被杀掉

wKiom1fdNCLiSbiQAAASJKEhBXI861.png

示例2:强制杀掉某进程(进程可以使用pkill -9 -t pts/1 等直接杀掉哦)

现在要杀掉此进程

wKioL1fdNCOS1fYLAAANYFrRj3I991.png

查看此进程的pid号码

wKiom1fdNCSSWvt_AAAjHXyfMvM313.png

正常的15信号会发现是杀不死此进程

wKioL1fdNCXjnFjfAABuWD2ez9M770.png

发送强制信号9杀死进程,发现此进程已经被杀死

wKiom1fdNCaxbKzMAAAgIXEe8G0074.png

示例3:杀死所有的指定进程

wKiom1fdNCeS_n8xAABAb7XfEr0213.png

示例4:杀死指定匹配的进程

wKioL1fdNCjTnZ-xAABH2ePM0MA391.png


Linux作业管理篇

Linux的作业控制

    前台作业:通过终端启动,且启动后一直占据终端;

    后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

如何让作业运行于后台?

    (1) 运行中的作业:Ctrl+z

    (2) 尚未启动的作业:COMMAND &

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

    nohup COMMAND & screen;COMMAND (此处可以查看Linux入门帮助篇screen的用法)

查看所有作业:

    jobs

作业控制:

    fg[[%]JOB_NUM]:把指定的后台作业调回前台;

    bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行;

    kill [%JOB_NUM]:终止指定的作业;

前台运行、后台运行、后台休眠关系图

wKiom1fc_c_CLq9uAAAZ6ha8T0g747.png

示例1:把前台进程转到后台运行,并且把它关闭

在命令后面加上&符号,把进程转到后台运行,下图可以看见,开始会提示[1] 3193表示他的pid号和jobs的编号,

然后在中间输入了ctrl+c的信号,但是程序并没有停止下来

如果上面的jobs号被刷掉的话,此时可以快速输入jobs命令,会显示jobs 1正在运行,然后再执行fg加指定jobs编号把命令调回来前台执行,然后按ctrl+c终止掉命令

wKioL1fdANigFXLAAACy7N78yYk428.png

示例2:把程序调到后台休眠状态,然后再把程序调回去后台运行

wKioL1fdApaCjBRqAABQLkpuFxY231.png

如果向程序继续在调后台执行,则输入bg加jobs num

wKioL1fdAv7DwSrTAACgVWpVD1A153.png

示例3:通过kill命令对后台命令进程操作

kill第18级命令,唤醒后台的休眠的做工,让其继续在后台运行

wKiom1fdBwSSFZmfAACQ1BUTk1M976.png

kill第19号命令,让程序进入后台休眠状态

wKioL1fdBwXR5ajvAACN-_MZkwU257.png

并行同时运行多个进程,提高效率

正常来说,同时执行几个命令,他们应该是按照顺序执行,一个完成后再执行另外以一个

同时运行多个程序的方法:

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

    { f1.sh& f2.sh& f3.sh& }

    

示例:同时运行多个程序

wKioL1fdBjuDGTYfAAAq2Rl3Ksc717.png

wKiom1fdBjuTJW0tAAAuViH9EjI990.png

进程优先级调整:

    静态优先级:100-139

    进程默认启动时的nice值为0,优先级为120

    只有根用户才能降低nice值(提高优先性)

    普通用户能把自己运行的程序的优先级调低,但是不能调高

nice命令:只能够指定未开始执行的程序

    nice [OPTION] [COMMAND [ARG]…]

renice命令:对已经正在进行的程序重新分配其优先级

    renice [-n] priority pid…

查看:

ps axo pid,comm,ni

示例1:调高某程序的优先级

ping程序的默认ni优先级只有0

wKioL1fdCzaA_M7rAAANCf95X40219.png

nice -10 指定该命令优先级为10

wKiom1fdCziS_SsVAABJjmt4KDk657.png

ps axo指定查看其优先级,可以看见优先级已经改变

wKioL1fdCzmzytGpAAANiuG5XWg509.png

如果需要改其优先级为负数的话,则输入–

wKioL1fdCzqRErH3AAA7zwJtBpQ195.png

可以看见此时已经是负数的优先级

wKiom1fdCzrSJNQ9AAAM9HbO81I535.png

示例2:重新修改某程序优先级

wKiom1fdDCyzqPDRAABfEKCedoA142.png

任务计划

Linux任务计划、周期性任务执行

未来的某时间点执行一次任务:

    at

    batch:系统自行选择空闲时间去执行此处指定的任务

周期性运行某任务:

    cron

at任务

包:at

at命令:at [option] TIME

常用选项:

    -V 显示版本信息:

    -l: 列出指定队列中等待运行的作业;相当于atq

    -d: 删除指定的作业;相当于atrm

    -c: 查看具体作业任务

    -f /path/from/somefile:从指定的文件中读取任务

    -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

TIME:定义出什么时候进行at 这项任务的时间

     [YYYY-mm-dd]

    noon, midnight, teatime(4pm)

    tomorrow

    now+#{minutes,hours,days, OR weeks}

示例:

HH:MM 02:00

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

HH:MM YYYY-MM-DD 04:00 2016-09-20

规定在某年某月的某一天的特殊时刻进行该项任务

HH:MM[am|pm] [Month] [Date]

04pm March 17

17:20 tomorrow

HH:MM[am|pm] + number [minutes|hours|days|weeks]

在某个时间点再加几个时间后才进行该项任务

now + 5 minutes

04pm + 3 days

at任务执行方式:

  1)交互式 2)输入重定向 3)at –f 文件

  依赖与atd服务,需要启动才能实现at任务

  at队列存放在/var/spool/at目录中

  /etc/at.{allow,deny}控制用户是否能执行at任务

    白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令

    黑名单:/etc/at.deny 拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行

    如果两个文件都不存在,只有root 可以执行at 命令

示例1:新建一个计划任务

在17:52分,执行命令echo hello world,但是我们并没有看见有任务,原来是因为echo hello world是标准输出,有标准输出的计划任务,都会以发邮件显示,所以这一点需要注意。

wKioL1fdEpXCyivvAACb2bFWshM655.png

示例2:添加白名单控制,指定某用户才能执行at任务

可以看见,在白名单里面添加了wan的用户,此用户可以执行at计划任务,但是wan2用户不在白名单里面,所以执行at命令的时候就会提示权限不够。

wKiom1fdFDPjOIFbAABZFuoxBlk404.png

示例3:重定向脚本到at任务里面

wKiom1fdFiLCyRCFAAA26UJcJm4462.png

周期性任务计划cron

相关的程序包:

cronie: 主程序包,提供crond守护进程及相关辅助工具

cronie-anacron:cronie的补充程序;用于监控cronie任务执行状况;如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

crontabs:包含CentOS提供系统维护任务

计划任务

确保crond守护处于运行状态:

    CentOS 7:

        systemctl status crond

    CentOS 6:

        service crond     status

计划周期性执行的任务提交给crond,到指定时间会自动运行

    系统cron任务:系统维护作业

        /etc/crontab

    用户cron任务:

        crontab命令

日志:/var/log/cron

系统cron任务的/etc/crontab文件格式

wKioL1fdF7yhSs4EAACQaf5eRTQ883.png

系统cron任务:/etc/crontab

注释行以# 开头

详情参见man 5 crontab

# 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

例如:晚上9点10分以centos身份运行echo命令;

10 21 * * * centos /bin/echo "Howdy!"

时间表示法:

(1) 特定值;

    给定时间点有效取值范围内的值

(2) *

    给定时间点上有效取值范围内的所有值

    表示“每…”

(3) 离散取值:

    #,#,#

(4) 连续取值:-

    #-#

(5) 在指定时间范围上,定义步长:

    /# : #即为步长

    例如:每3小时echo命令;

    0 */3 * * * centos /bin/echo "howdy!"

一些特殊的时间表示格式

@reboot 表示每次重启以后执行    Run once after reboot.

@yearly 表示每年1月1日执行   0 0 1 1 *

@annually 同上   0 0 1 1 *

@monthly 每个月1号执行   0 0 1 * *

@weekly 每周日执行   0 0 * * 0

@daily 每天执行   0 0 * * *

@hourly 每小时执行   0 * * * *

示例1:新增系统计划任务

wKiom1fdHuWDPowdAACK8hnydhE529.png


示例2:让系统计划任务执行指定脚本

执行脚本的时候,如果是非root用户,需要注意用户执行脚本的权限

新增一个任务:工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

wKiom1fdMJKgqj26AABaLj10vn4285.png

wKioL1fdMCPhNNohAAAg-iDmnBA362.png

anacron系统

运行计算机关机时cron不运行的任务,CentOS6以后版本取消anacron服务,由crond服务管理。

假设计算机没有一直开机

对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要

对偶尔要关机的服务器很有用

配置文件:/etc/anacrontab

负责执行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务。

    /etc/cron.hourly/由/cron.d/0hourly执行

   字段1:如果在这些日子里没有运行这些任务……

   字段2:在重新引导后等待这么多分钟后运行它

   字段3:任务识别器,在日志文件中标识

   字段4:要执行的任务

   当执行任务时,更新/var/spool/anacron/中文件的时间戳

系统的计划任务:

/etc/crontab

/etc/cron.d/   配置文件

定义一些系统的配置文件,例如0hourly,表示每小时执行run-parts对/etc/cron.hourly里面的任务

wKiom1fdGZ3Rsj7iAABzzx8hfNU417.png

/etc/cron.hourly/   每小时执行的脚本

wKioL1fdGm6TgUr7AABbldOr8OA445.png

/etc/cron.daily/   脚本

系统为什么刚安装完以后,一部分命令的帮助手册没有的原因。然后过一段时间会自动生成帮助手册,原因就在这里了,因为系统每天定义会自动执行mandb的命令(centos7)

wKioL1fdGrjCQdBrAACH2ztIRdE198.png

/etc/cron.weekly/   每周脚本,默认为空

wKiom1fdGybywGN2AAAVN24XJws134.png

/etc/cron.monthly/   每月脚本,默认为空

wKioL1fdGybTOj1UAAAUDlouRKU610.png

管理临时文件

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

CentOS7使用systemd-tmpfiles-setup服务实现

配置文件:

    /etc/tmpfiles.d/*.conf

    /run/tmpfiles.d/*.conf

    /usr/lib/tmpfiles/*.conf

/usr/lib/tmpfiles.d/tmp.conf

    d /tmp 1777 root root 10d

    d /var/tmp 1777 root root 30d

命令:

    systemd-tmpfiles –clean|remove|create configfile

示例:系统自定义的定义清理临时文件的脚本,每10天清理/tmp目录,没30天清理/var/tmp目录

wKioL1fdIJnDxnr_AABTS4E-Gs0810.png

用户计划任务cron:

crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

crontab命令:

   crontab [-u user] [-l | -r | -e] [-i]

    -l: 列出所有任务;

    -e: 编辑任务;

    -r: 移除所有任务;

    -i:同-r一同使用,以交互式模式移除指定任务

    -u user: 仅root可运行,指定用户管理cron任务

控制用户执行计划任务:(此处用法原理跟at的allow和deny是一样的)

   /etc/cron.{allow,deny}

示例1:创建wan用户的任务

创建任务1:每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

创建任务2:每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

wKioL1fdJ5ySDfRjAABcvg8QunM411.png

示例2:添加计划任务的权限

当白名单存在的时候,仅允许白名单的用户执行计划任务,其他用户不予执行。

假如白名单不存在的时候,仅有黑名单文件,那么,仅黑名单的用户不能执行计划任务,其他用户都可以执行计划任务。

wKiom1fdKQ2RjNjsAABcvg8QunM188.png

示例3:删除计划任务

wKiom1fdKYPiM5XTAAA-EGrnAME363.png

示例4:编辑指定用户的计划任务

wKioL1fdKmXB7DX8AABP__CaFDg358.png

at任务和crontab任务的区别

一次性作业使用at

重复性作业使用crontab

Create创建任务     at time     crontab -e

List列表任务      at -l      crontab -l

Details查看细节     at -c jobnum   N/A

Remove删除任务     at -d jobnum   crontab -r

Edit          N/A       crontab -e

没有被重定向的输出会被邮寄给用户

根用户能够修改其它用户的作业

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

    (1) COMMAND > /dev/null

    (2) COMMAND &> /dev/null

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义

思考:参考sleep命令~

(1) 如何在秒级别运行任务?

* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done

(2) 如何实现每7分钟运行一次任务?

sleep命令:

    sleep NUMBER[SUFFIX]…

        SUFFIX:

        s: 秒, 默认

        m: 分

        h: 小时

        d: 天

原创文章,作者:~微风~,如若转载,请注明出处:http://www.178linux.com/47225

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code