linux进程管理

一、进程基本信息

1.1 进程和线程

1.1.1 进程(Process)

进程是程序的执行实例,拥有独立的资源和状态。

1.1.2 线程(Thread)

线程是进程中的执行路径,共享进程的资源和地址空间。 多个线程可以并发执行,实现程序的并发处理。

1.1.3 进程和线程的区别

进程之间相互独立,线程之间共享资源。 进程之间通过进程间通信(IPC)交换数据和共享资源,线程之间通过共享内存来通信和共享数据。

1.2 进程的特征

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

1.3 进程优先级

在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice

PRI 代表 Priority,NI 代表 Nice。 这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。

不过,PRI值是由内核动态调整的,用户不能直接修改。 所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

[root@localhost ~]# nice -n -10 ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.044 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.048 ms
^C
--- 127.0.0.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4999ms
rtt min/avg/max/mdev = 0.042/0.049/0.078/0.015 ms
[root@localhost ~]# renice -n +19 55486
55486 (进程 ID) 旧优先级为 -20,新优先级为 19
​

修改 NI 的值就可以改变进程的优先级。 NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理; NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理。

修改 NI 值时有几个注意事项:

NI 范围是 -20~19。 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

1.4 用户进程和终端进程

1.4.1 用户进程

用户进程是由普通用户创建并执行的进程. 这些进程通常是用户在终端或Shell会话中启动的命令、脚本或应用程序。 用户进程通常与用户的登录会话相关联,并且在用户注销或会话结束后会被终止。

1.4.2 终端进程

终端进程是指与终端设备(如控制台、虚拟终端、SSH会话等)相关联的进程. 终端进程会监控终端设备的输入和输出,并将用户输入传递给命令或应用程序,并将命令或应用程序的输出显示在终端设备上。

1.4.3 用户进程和终端进程的关联性

用户进程通常由终端进程启动的; 终端进程负责将用户输入传递给用户进程,将用户进程的输出显示在终端设备上; 用户进程则可以通过终端进程与用户进行交互,并接受用户的输入和输出结果。

1.5 僵尸进程

1.5.1 什么是僵尸进程

当一个子进程终止时,内核会将其相关信息保留在系统中,以供父进程查询。 通常情况下,父进程会调用wait()或waitpid()系统调用来获取子进程的退出状态和资源释放。 如果父进程没有及时处理这些退出状态信息,子进程就会一直保留在系统中,成为僵尸进程。 僵尸进程不会执行任何代码,也不会占用系统资源,但它们的进程表项和一些资源(比如PID等)仍然存在于系统中,这可能导致系统中存在大量僵尸进程,造成资源浪费。

1.5.2 怎么解决僵尸进程?
[root@localhost ~]# bash
[root@localhost ~]# echo $BASHPID
55969
[root@localhost ~]# echo $PPID
16073
[root@localhost ~]# kill -19 16073  ##将父进程设为停止态
[root@localhost ~]# kill -9 55969  ##杀死子进程,使其进入僵尸态
[root@localhost ~]# ps aux  ##可以看到上面图示的结果,STAT为Z,表示僵尸态
root      55969  0.0  0.0      0     0 pts/2    Z+   17:08   0:00 [bash] <de
#方法1:恢复父进程
[root@localhost ~]# kill -18 16073
#方法2:杀死父进程
[root@localhost ~]# kill -9 16073
[root@localhost ~]# ps aux
#再次观察,可以僵尸态的进程不存在了
​
​
​
​

二、查看进程

2.1 静态查看进程信息 ps命令

ps命令是用于查看当前运行的进程信息的命令。它提供了有关正在运行的进程的详细信息,例如进程ID(PID)、父进程ID(PPID)、进程状态、CPU和内存使用情况等。

命令格式

ps [选项]

a 显示当前终端下的所有进程信息,包括其他用户的进程 u 使用以用户为主的格式输出进程信息 x 显示当前用户在所有终端下的进程信息 -e 显示系统内的所有进程信息 -l 使用长(Long)格式显示进程信息 -f 使用完整的(Full)格式显示进程信 [选项]-- sort 对属性排序,属性前加 - 表示降序排列

2.1.1 显示所有进程
2.1.1.1 ps aux

ps aux 显示所有当前活动的进程的详细信息

表头含义
USER该进程是由哪个用户产生的。
PID进程的 ID。
%CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ该进程占用虚拟内存的大小,单位为 KB。
RSS该进程占用实际物理内存的大小,单位为 KB。
TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?代表和终端无关,系统进程
STAT进程状态。常见的状态有以下几种: -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。 -S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。 -W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。 -Z:僵尸进程。进程已经中止,但是还是占用硬件资源。 -<:高优先级(以下状态在 BSD 格式中出现)。 -N:低优先级。 -L:被锁入内存。 -s:包含子进程。 -l:多线程(小写 L)。 -+:位于后台。
START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。

TTY

tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端) tty1~tty6 是本地的字符界面终端 tty7 是图形终端 pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长 ?代表和终端无关,系统进程

2.1.1.2 ps -ef
表头含义
F进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改
NI进程的优先级,数值越小,该进程越早被执行;可以人为修改
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

F //进程标志 常见的标志有两个 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限;

2.1.1.3 区别
ps auxps -ef
排序标准用户进程的启动时间
输出结果包含更多的列如CPU使用率、内存使用量等包含更多的进程状态相关的列,如UID
2.1.3 查看进程特定属性 ps -o
[root@localhost ~]#  -o pid,ppid,cmd,%cpu,%mem..    ##显示进程id,父进程id,命令,cpu使用率,内存使用率等等
后面可跟单个或者多个参数,多个参数用逗号隔开
[root@localhost ~]# ps axo pid |head      ##仅显示pid
   PID
     1
     2
     3
     5
     7
     8
     9
    10
    11
[root@localhost ~]# ps -eo ppid,%CPU   ##仅显示父进程pid CPU 占用
  PPIDppid,%CPUPU
     0ppid, 0.0PU
     0ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
     2ppid, 0.0PU
​
2.1.4 进程排序 --sort=

ps [选项] --sort=目标属性 //升序排列

ps a --sort=user 按照用户排序,以显示同一用户的进程在一起。
ps a --sort=pid  按照进程ID
ps a --sort=cpu  按照CPU使用率
ps a --sort=mem  按照内存使用量
ps a --sort=time 按照进程运行时间
​
ps [选项] --sort= -目标属性  ##降序排列
[root@localhost ~]# ps aux --sort=cpu | head -n 7     ##按CPU占用率降序排序所有进程 并显示前七行
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193700  6856 ?        Ss   14:43   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    14:43   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    14:43   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   14:43   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    14:43   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    14:43   0:00 [rcu_bh]
​
ps aux --sort=-pid  //按pid降序排列

2.2 动态查看进程信息 top命令

top 命令可以动态地持续监听进程的运行状态。 top命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

  • -p 进程PID:仅查看指定 ID 的进程;

  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

  • -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作

  • ? 或 h:显示交互模式的帮助;

  • c:按照 CPU 的使用率排序,默认就是此选项;

  • M:按照内存的使用率排序;

  • N:按照 PID 排序;

  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

  • r:按照 PID 给某个进程重设优先级(Nice)值;

  • q:退出 top 命令;

首部信息显示:

uptime信息:l命令
​
tasks及cpu信息:t命令
​
cpu分别显示:1 (数字)
​
memory信息:m命令
​
退出命令:q
​
修改刷新时间间隔:s
​
终止指定进程:k
​
保存文件:W

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;

  2. 第二部分从第六行开始,显示的是系统中进程的信息;

2.3 以树状结构显示当前系统中运行的进程 pstree

pstree命令以树状结构显示当前系统中运行的进程,其中包括进程的父子关系和层级关系。

命令格式 pstree [选项] [PID或用户名] // 不加参数默认显示所有进程

pstree [选项] PID //显示指定PID的进程 pstree [选项] 用户名 //显示指定用户的进程

[选项] -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等 -p 显示PID -T 不显示线程thread,默认显示线程 -u 显示用户切换 -H pid 高亮显示指定进程及其前辈进程

[root@localhost ~]# pstree 14434    ##对应的进程是bash
bash───su───bash
pstree -p root //显示用户root的进程和对应pid
​
​

2.4 查看指定的进程信息

2.4.1 根据PID查程序名 prtstat

prtstat PID ##查找程序名

[root@localhost ~]# prtstat 14516
Process: bash               State: S (sleeping)
  CPU#:  2          TTY: 136:0  Threads: 1
Process, Group and Session IDs
  Process ID: 14516       Parent ID: 14509
    Group ID: 14516      Session ID: 14434
  T Group ID: 14516
​
Page Faults
  This Process    (minor major):     2840         0
  Child Processes (minor major):    21837         1
CPU Times
  This Process    (user system guest blkio):   0.01   0.02   0.00   0.00
  Child processes (user system guest):         0.02   0.06   0.00
Memory
  Vsize:       119 MB    
  RSS:         3379 kB           RSS Limit: 18446744073709 MB
  Code Start:  0x400000          Code Stop:  0x4dcaec  
  Stack Start: 0x7ffe336b7680
  Stack Pointer (ESP): 0x7ffe336b6328    Inst Pointer (EIP): 0x7f70718077e0
Scheduling
  Policy: normal
  Nice:   0          RT Priority: 0 (non RT)
​
2.4.2 根据程序名查PID pgrep和pidof
pgrep命令
​
​
查看指定的进程
​
- -U 指定用户
- -l: 显示进程名
- -a: 显示完整格式的进程名
- -P pid: 显示指定进程的子进程
​
```bash
[root@test ~]# pgrep -l "log"
# 显示进程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd
[root@test ~]# pgrep -l -U zhangsan
#指定用户
​
​
pidof    
#根据进程名 来找pid号
pidof  dd
​
uptime
[root@localhost ~]#uptime
 10:36:45 up  5:02,  2 users,  load average: 0.97, 0.50, 0.23
​
​
​

已知程序名不知道pid号

[root@localhost ~]#pidof nginx
#查看  nginx进程的 pid 号
22142 22002
​
2.4.3 lsof

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof [选项]
选项功能
-c 字符串只列出以字符串开头的进程打开的文件。
+d 目录名列出某个目录中所有被进程调用的文件。
-u 用户名只列出某个用户的进程打开的文件。
-p pid列出某个 PID 进程打开的文件。
[root@localhost ~]# lsof | more
#查询系统中所有进程调用的文件
​
​
​
​
误删文件可以找回
有人在使用
lsof |grep delete
cupsd      1144(pid)           root   10r      REG              253,0      2337    9381005 /etc/passwd+ (deleted)
​
ll /proc/1144/fd
fd 是文件描述符
[root@localhost data]#ll /proc/1144/fd
总用量 0
lr-x------. 1 root root 64 11月 29 11:26 0 -> /dev/null
lrwx------. 1 root root 64 11月 29 11:26 1 -> socket:[20288]
lr-x------. 1 root root 64 11月 29 11:26 10 -> /etc/passwd+ (deleted)
lrwx------. 1 root root 64 11月 29 11:26 11 -> socket:[24022]
lrwx------. 1 root root 64 11月 29 11:26 12 -> socket:[24023]
​
cat /proc/1144/fd/10
五大性能
内存使用率free,top
cpu使用率w,top,ps,iostat,uptime
硬盘使用率df
硬盘读写性能dd,iostat
网络带宽iftop

内存

  • buff/cache共享缓存空间

内存独立出部分空间用于存取缓存数据,当满足系统设定的条件后自动将数据存放至硬盘中。

free -h可以查看buff/cache占用情况

  • 如何清理缓存

free  -h
free  -m   #以m为单位查看
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        288M        1.1G        9.1M        411M        1.3G
Swap:          2.0G          0B        2.0G
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1823         287        1123           9         411        1333
Swap:          2047           0        2047

​
cd proc/sys/vm                              #找到缓存路径
ls                                          #查看vm文件夹下的文件或文件夹
cat drop_caches                             #查看缓存文件夹内容
pwd                                         #查看当前文件夹路径
echo 3 >/proc/sys/vm/drop_caches            
​

vmstat监控系统资源,虚拟资源

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1301648   2116 396752    0    0    38     3   33   33  0  0 100  0  0
  • 下表罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。

选项含义
-fs-f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。 -s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。
-S 单位令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d列出硬盘有关读写总量的统计表。
-p 分区设备文件名查看硬盘分区的读写情况。
字段含义
procs进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
memory内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。-buff:缓冲的内存容量,单位为 KB。-cache:缓存的内存容量,单位为 KB。
swap交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。
system系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。这两个数越大,代表系统与接口设备的通信越繁忙。
cpuCPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比

  • iostat

iostat 可以提供更丰富的IO性能状态数据

此工具由sysstat包提供

常用选项:
-c 只显示CPU行
-d 显示设备〈磁盘)使用状态
-k 以千字节为为单位显示输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标

例子:

[root@localhost ~]#iostat 1 -d /dev/sda
#只看 sda硬盘
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain)     2023年07月27日     _x86_64_    (4 CPU)
​
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             288.01     19561.04      7282.13   27750860   10331013
​
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         8.00         0.00          8          0
​

  • 监视磁盘I/O iotop(需要额外安装)

iotop
 
dd if=/dev/zero of=/dev/null
​
iftop -ni ens33
#网络流量
​
网页客户端
wget https://prdownloads.sourceforge.net/webadmin/webmin-1.955-1.noarch.rpm
yum -y install webmin-1.955-1.noarch.rpm
service webmin start
ss -ntl
​
​
默认用户:root  密码:123123

uptime 系统运行了多久时间

[root@localhost ~]#uptime 
 01:29:00 up  2:07,  6 users,  load average: 0.00, 0.01, 0.05
当前时间      运行时间  登录用户

系统资源统计 dstat

yum  install   dstat -y

webmin

官网:Webmin

yum install webmin-2.100-1.noarch.rpm -y
rpm -q webmin
systemctl start webmin
systemctl status webmin
​
https://192.168.91.100:10000/
root  
自己系统的密码
​

进程管理

手动启动进程

前台执行:会影响当前的操作

后台执行:不会影响当前的操作

命令 &将前台命令放入后台执行
命令 ctrl+z将运行中的前台命令放入后台挂起
jobs后台任务列表,会显示序号
bg 序号继续运行后台的命令
fg 序号调出后台任务

并行执行任务

[root@localhost ~]#ping 127.0.0.1&ping 127.0.0.2&ping 127.0.0.3&
​
​
killall ping
​
screen
​
nohup  ping 127.0.0.1
​
​
#!/bin/bash
host="192.168.91."
​
for i in {1..254}
do
{
ping  -c1  -w1 $host$i &>/dev/null && echo $host$i is up || echo $host$i is down 
}&
done
wait

结束进程

kill

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

kill [信号] PID 
kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号
​
1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程;相当于Ctrl+c 3) SIGQUIT 相当于ctrl+\ 9) SIGKILL 强制杀死正在运行的进程,可能会导致数据丢失,慎用!
9)  关电源   数据库  写           
15) SIGTERM 终止正在运行的进程,默认信号
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠
信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。
[root@localhost data]#trap -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

计划任务

  1. 一次性计划任务:at

at [option] TIME
at [选项] [时间]
[HH:MM]  [yyyy-mm-dd]
​
HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
02:00              
HH:MM YYYY-MM-DD   规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2023-10-20   
HH:MM[am|pm] [Month] [Date]
06pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks], 在某个时间点再加几个时间后才进行该
项任务
now + 5 min 
02pm + 3 days
格式用法
HH:MM比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight)代表 12:00 AM(也就是 00:00)。
Noon(noon)代表 12:00 PM(相当于 12:00)。
Teatime(teatime)下午茶代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY比如 011518 表示 2018 年 1 月 15 号。
now+时间以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。

  1. 周期性计划任务:crontab

[root@localhost ~]#systemctl status crond.service 
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-03-01 21:23:18 CST; 3h 28min ago
 Main PID: 1067 (crond)
   CGroup: /system.slice/crond.service
           └─1067 /usr/sbin/crond -n
​
Mar 01 21:23:18 localhost.localdomain systemd[1]: Started Command Scheduler.
Mar 01 21:23:18 localhost.localdomain systemd[1]: Starting Command Scheduler...
Mar 01 21:23:18 localhost.localdomain crond[1067]: (CRON) INFO (RANDOM_DELAY will be scaled with facto...d.)
Mar 01 21:23:18 localhost.localdomain crond[1067]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
​
​
​
#################
crontab [选项] [file]
###############
选项功能
-u user用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i在删除用户的 crontab 文件时,给确认提示。
crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
项目含义范围
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)

在时间表示中,还有一些特殊符号需要学习

特殊符号含义
*(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线)代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。
每月的 1号 15号  30号
* *   1,15,30  *  *
​
​
​
​
​
中午  12点  -  16点 
*  12-16/2  *  *  *
​
​
​
每  半小时 执行  一次
30  *   * * *
​
​
​
[root@localhost opt]#cat /etc/crontab 
SHELL=/bin/bash
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
​
​
创建计划任务
crontab -u zhnagsan -e  
#注意权限
​
*/2 * * * *  /usr/bin/cp /etc/passwd  /opt/
#每两分钟执行脚本
​
​
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
*/2 * * * *  /usr/bin/cp /etc/passwd  /opt/
​
​
​
​
30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`
30 2 * * * /bin/cp -a /etc/ /data/etc`date +‘%F_%T’`   有问题  执行不了

在书写 crontab 定时任务时,需要注意以下几个事项:

  • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。

  • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。

  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。

  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

  • 35
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值