目录
一、查看进程
1. 程序
程序是特定任务的一串代码,是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。用于描述进程要完成的功能,是控制进程执行的指令集。
2. 进程
2.1 概述
进程是运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,进程是有生命周期的。centos6及之前由init串行启动管理进程;从centos7以后为systemd并行启动管理进程。进程都由其父进程创建,fork(),centos最初的父进程是systemd(pid=1)。
[root@localhost ~]# bash
[root@localhost ~]# pstree -p | grep bash
|-sshd(1190)-+-sshd(1262)---bash(2095)---bash(3282)-+-grep(3408)
| `-sshd(3362)---bash(3372)
bash(2095)和bash(3282)为父子关系,bash(2095)和bash(3372)为兄弟关系。
2.2 进程的特征
- 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
- 并发性:任何进程都可以同其他进程一起并发执行;
- 独立性:进程是系统进行资源分配和调度的一个独立单位;
- 结构性:进程由程序、数据和进程控制块三部分组成。
2.3 进程使用内存的问题
内存不足:OOM
OOM 即 Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到相关的提示。
2.4 进程的状态
- 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
- 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
- 执行状态:进程处于就绪状态被调度后,进程进入执行状态
- 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
- 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
2.5 进程的优先级os
系统中的两种优先级:在top中显示的优先级有两个,PR值和nice值
Nice Level优先级,Nice即NI;PR系统内置的优先级,不能控制;PR=NI+20。启动进程时,通常会继承父进程的nice级别,默认为0。
NI:实际nice值
PR(+-20):将nice级别显示为映射到更大优先级别队列,-20映射到0,+19映射到39
特性:
nice值越大:表示优先级越低,例如 +19
nice值越小:表示优先级越高,例如 -20
优先级查看与管理:
[root@localhost ~]# ps axo pid,comm,ni #显示pid,进程名,nice值
[root@localhost ~]# sleep 8000 & #sleep命令可以用来将目前动作延迟一段时间,&后台运行
[1] 2675
[root@localhost ~]# ps axo pid,command,nice | grep sleep
2675 sleep 8000 0
2683 sleep 60 0 #系统自带计时器
2685 grep --color=auto sleep 0 #搜索程序本身
[root@localhost ~]# renice -n -20 2675 #renice重置现有优先级
2675 (进程 ID) 旧优先级为 0,新优先级为 -20
[root@localhost ~]# ps axo pid,command,nice | grep sleep
2675 sleep 8000 -20
2694 sleep 60 0
2697 grep --color=auto sleep 0
[root@localhost ~]# nice -n -10 sleep 6000 & #启动指定nice级别的进程
[2] 2826
[root@localhost ~]# ps axo pid,command,nice | grep sleep
2675 sleep 8000 -20
2824 sleep 60 0
2826 sleep 6000 -10 #nice值为-10
2828 grep --color=auto sleep 0
2.6 进程的分类
- 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
- 前台进程:跟终端相关,通过终端启动的进程
2.7 进程与线程
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
Q:如何确认一个程序是单线程还是多线程?
查看改程序的详细状态
[root@localhost ~]# cat /proc/该程序的pid/status
[root@localhost ~]# grep -i threads /proc/该程序的pid/status
[root@localhost ~]# prtstat 该程序的pid
二、进程查看
1. ps
1.1 概述
ps命令可以静态查看进程当前状态,默认显示当前终端中的进程。
1.2 常用选项
- a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
- u:使用以用户为主的格式输出进程信息。
- x:显示当前用户在所有终端下的进程信息,不以终端机来区分。
- -e:显示系统内的所有进程信息。
- -l:使用长(Long)格式显示进程信息。
- -f:使用完整的(Full)格式显示进程信
- k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
- o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
1.3 字段说明
[root@localhost ~]# ps aux | head -n3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128384 6976 ? Ss 12:19 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 12:19 0:00 [kthreadd]
- USER:运行进程的用户
- PID:进程ID,程序的名字 PPID:父系程序的名字
- %CPU:CPU占用率
- %MEM:内存占用率
- VSZ:占用虚拟内存
- RSS:占用实际内存
- TTY:进程运行的终端——?没有终端;pts某一个终端
- STAT:进程状态man ps(/STATE)
- START:进程启动的时间
- TIME:进程启动时间
- COMMAND:进程文件,进程名
ps aux #如果看到STAT为Z,表示为僵尸态。Q:如何过滤僵尸进程?
[root@localhost ~]# ps aux | grep -v grep | grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1.4 父子关系与排序
[root@localhost ~]# ps -ef | head -n 3
#显示列C表示cpu利用率,查看进程父子关系PID(自己的身份证号)PPID(父系)
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:11 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 15:11 ? 00:00:00 [kthreadd]
[root@localhost ~]# ps aux --sort %cpu | head -n 3
#升序查看cpu利用率,或者ps aux k %cpu | head -n 3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128384 7112 ? Ss 15:11 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 15:11 0:00 [kthreadd]
[root@localhost ~]# ps aux --sort -%cpu | head -n 3
#降序查看cpu利用率,或者ps aux k -%cpu | head -n 3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 721 0.2 0.2 295564 5300 ? Ssl 15:11 0:26 /usr/bin/vmtoolsd
root 415 0.1 0.0 0 0 ? S 15:11 0:14 [xfsaild/dm-0]
1.5 自定义显示字段
[root@localhost ~]# ps axo user,pid,ppid,%mem,command | head -3
#自定义显示用户名,pid,父pid,内存占用率,进程名前三行信息
USER PID PPID %MEM COMMAND
root 1 0 0.3 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0.0 [kthreadd]
2. top
2.1 概述
top命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。
[root@localhost ~]# top | head
top - 19:52:14 up 4:40, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 172 total, 1 running, 171 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863028 total, 928920 free, 530992 used, 403116 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1155968 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5728 root 20 0 162100 2224 1536 R 6.2 0.1 0:00.01 top
1 root 20 0 128384 7112 4220 S 0.0 0.4 0:04.13 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
2.2 进程的性能(上半部分)
第一行:程序名-系统时间,运行时间,登录用户数,CPU负载1分钟5分钟15分钟(cpu负载三个时间点的平均值)
第二行:任务总进程数172,运行数1,睡眠数171,停止数0,僵死数0
第三行:cpu使用占比,us用户 ,sy系统,ni优先级,id空闲,wa等待处理所耗时间,hi硬件耗时,si软件耗时,st虚拟机
第四行:物理内存K,total总共, free空闲,userd使用,buff写缓存、cache读缓存硬盘内容,缓存多了会造成卡顿
缓冲(buffer)和缓存(cache)的区别:
-
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取
-
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能
第五行:虚拟内存(交换分区),当内存不够时,将硬盘空间当作内存使用
2.3 进程的状态(下半部分)
PID,USER,%CPU,%MEM同上“1.3”,介绍见前部分
VIRT:virtual memory usage 虚拟内存
RES:resident memory usage 常驻内存
SHR:shared memory 共享内存;除了自身进程的共享内存,也包括其他进程的共享内存
2.4 top常用内部指令
- h|?帮助
- M按内存的使用排序
- P按CPU使用排序
- N以PID的大小排序
- < 向前
- > 向后
- z彩色,Z设置彩色
2.5 top使用技巧
top:回车,立刻刷新。按z彩色显示,按F,通过光标设置
top -d 1:每1秒刷新
top -d 1 -p pid:查看指定进程的动态信息
top -d 1 -p pid1,pid2:查看多个指定进程的动态信息
Q:cpu利用率高如何排查?
使用top或者ps aux命令查看进程,另外w和vmstat命令也可以查看
3. pgrep
查看指定的进程
- -U 指定用户
- -l: 显示进程名
- -a: 显示完整格式的进程名
- -P pid: 显示指定进程的子进程
[root@localhost ~]# pgrep -l "log" #显示进程名
413 xfs-log/dm-0
630 xfs-log/sda1
730 abrt-watch-log
737 abrt-watch-log
754 systemd-logind
1195 rsyslogd
[root@localhost ~]# pidof bash #根据进程名找pid号
4884 812 #pid4884
Q:当前系统root用户一共运行了多少进程 ?
[root@localhost ~]# pgrep -U root | wc -l
129
4. pstree
以树形结构列出进程信息
- -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
- -p 显示PID
- -T 不显示线程thread,默认显示线程
- -u 显示用户切换
- -H pid 高亮显示指定进程及其前辈进程
[root@localhost ~]# pstree -p 1 | head -n1 #查看进程号为1的进程
systemd(1)-+-ModemManager(717)-+-{ModemManager}(733)
[root@localhost ~]# pstree root | head -n5 #查看用户lisi的进程
systemd-+-ModemManager---2*[{ModemManager}]
|-NetworkManager---2*[{NetworkManager}]
|-VGAuthService
|-2*[abrt-watch-log]
|-abrtd
5. lsof
lsof命令,“list opened files”的缩写,直译过来就是列举系统中已经被打开的文件。通过lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
选项 | 功能 |
-c 字符串 | 只列出以字符串开头的进程打开的文件 |
+d 目录名 | 列出某个目录中所有被进程调用的文件 |
-u 用户名 | 只列出某个用户的进程打开的文件 |
-p pid | 列出某个 PID 进程打开的文件 |
-i 端口号 | 有哪些程序占用端口号 |
[root@localhost ~]# lsof | head -n5 #查询系统中所有进程调用的文件
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 248 64 /
systemd 1 root rtd DIR 253,0 248 64 /
systemd 1 root txt REG 253,0 1632776 34040407 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 153450 /usr/lib64/libuuid.so.1.3.0
6. vmstat
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。
[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数]
[root@localhost ~]# vmstat -a 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 835504 295456 389152 0 0 27 4 49 78 0 1 99 0 0
0 0 0 835512 295456 389224 0 0 0 1 73 112 0 0 100 0 0
0 0 0 835512 295456 389224 0 0 0 0 57 93 0 0 100 0 0
字段含义:
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:每秒进行的事件切换次数;这两个数越大,代表系统与接口设备的通信越繁忙。
cpu信息字段: -us:非内核进程消耗 CPU 运算时间的百分比;-sy:内核进程消耗CPU运算时间的百分比;-id:空闲 CPU 的百分比;-wa:等待I/O所消耗的CPU 百分比;-st:被虚拟机所盗用的CPU百分比。
7. free
查看进程占用,内存的详细信息
free -h #人性化显示
free -m #以m为单位查看
Q:内存占用过多怎么办?
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 481M 986M 12M 351M 1.2G
Swap: 4.0G 0B 4.0G
[root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches #清除缓存
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 465M 1.2G 12M 134M 1.2G
Swap: 4.0G 0B 4.0G
不过这个方法只能临时缓解,最根本的还是增加硬件配置。
8. iostat
iostat 可以提供更丰富的IO性能状态数据,此工具由sysstat包提供。
常用选项:
- -c 只显示CPU行
- -d 显示设备〈磁盘)使用状态
- -k 以千字节为为单位显示输出
- -t 在输出中包括时间戳
- -x 在输出中包括扩展的磁盘指标
9. iotop/iftop
监视磁盘I/O;网络宽带。两个命令均要下载安装;如果iftop无法yum安装,需要安装epel源:yum install -y epel-release.noarch
[root@localhost ~]# yum install -y epel-release.noarch
[root@localhost ~]# yum install -y iftop
[root@localhost ~]# iftop -ni ens33 #网络流量
10. uptime
系统运行了多长时间
[root@localhost ~]# uptime
14:22:15 up 35 min, 1 user, load average: 0.02, 0.02, 0.05
#当前时间 运行时间 登录用户
11. mpstat
显示CPU相关统计
[root@localhost ~]# mpstat
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 2024年01月04日 _x86_64_ (2 CPU)
14时23分41秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
14时23分41秒 all 1.39 0.00 0.96 0.06 0.00 0.02 0.00 0.00 0.00 97.58
#当前时间 用户空间 ni优先级 系统内核 盗取时间
系统空闲
[root@localhost ~]# mpstat 1 3
#1秒 一次 看3次
12. dstat
系统资源统计,需要安装
[root@localhost ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
1 1 97 0 0 0| 216k 280k| 0 0 | 0 0 | 182 265
2 37 52 9 0 1|1408k 832k| 60B 818B| 0 0 |4676 5283
2 37 51 10 0 1|1284k 0 | 60B 354B| 0 0 |4644 5300
2 38 50 9 0 1|1184k 0 | 60B 346B| 0 0 |4562 5051 ^C
13. webadin
基于web界面的系统管理工具,可以通过浏览器远程管理linux;安装包获取:
链接:https://pan.baidu.com/s/1RFfkLKlLHeTSUK9wD3EKOw
提取码:vu8r
yum install webmin-2.100-1.noarch.rpm -y
rpm -q webmin
systemctl start webmin
systemctl status webmin
https://虚拟机ip:10000/
root
自己系统的密码
14. 服务器五大性能
资源 | 命令 |
cpu | top,w |
内存 | top,free |
硬盘剩余 | df |
硬盘读写性能 | iostat |
网络带宽 | iftop |
三、进程管理
1. 手动启动
- 前台启动:通过终端启动,且启动后一直占据终端
- 后台启动:可通过终端启动,但启动后即转入后台运行(释放终端),后台执行可以并行执行
1.1 将命令放入后台执行
[root@localhost ~]# sleep 8000 & #&表示放入后台
[1] 2156
1.2 查看后台任务列表
[root@localhost ~]# jobs
[1]+ 运行中 sleep 8000 &
1.3 调出后台任务
[root@localhost ~]# fg 1
sleep 8000
^Z #ctrl z
[1]+ 已停止 sleep 8000
1.4 继续任务
[root@localhost ~]# bg 1
[1]+ sleep 8000 &
1.5 并行执行任务
案例:查看192.168.190段哪些设备在线
[root@localhost ~]# vim ping.sh
#!/bin/bash
#name=ping
for i in {1..254}
do
{
ping -c1 -w2 192.168.190.${i} &> /dev/null && echo "192.168.190."$i" up" >> /data/up || echo "192.168.190."$i" down" >> /data/down
} &
done
#for循环,变量i取值1到254.向192.168.1.1~254各ping一个包,超时两秒,不论命令是否正确输出到垃圾箱;如果ping通将内容追加/data/up文件中;如果ping不通将内容追加/data/down文件中;整个过程后台运行。
2. 结束进程
2.1 kill
kill从字面来看,就是用来杀死进程的命令,但事实上,kill命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
kill [信号] PID
kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号 |
3 | QUIT | 退出 |
9 | KILL | 杀死进程,即强制结束进程 |
11 | SEGV | 段错误 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
注:可以使用 kill -l 命令查看所有信号及其编号
2.2 killall
killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
killall [选项] [信号] 进程名
- -i:交互式,询问是否要杀死某个进程;
- -I:忽略进程名的大小写;
2.3 pkill
当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程。不过plkill针对单个对象,killall可针对多个对象。该命令的基本格式如下:
pkill [-t 终端号] 进程名
- -u uid: effective user,生效者,根据进程所在的终端终止相应进程
- -U uid: real user,真正发起运行命令者,根据进程所属的用户名终止相应进程
- -t terminal: 与指定终端相关的进程
- -l: 显示进程名(pgrep可用)
- -a: 显示完整格式的进程名(pgrep可用)
- -P pid: 显示指定进程的子进程
[root@localhost ~]# w #查询本机已经登录的用户
16:52:50 up 1:51, 2 users, load average: 0.01, 0.13, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.190.1 15:02 2.00s 0.76s 0.02s w
root pts/1 192.168.190.1 16:52 3.00s 0.06s 0.06s -bash
[root@localhost ~]# pkill -9 -t pts/1
[root@localhost ~]# w #强制杀死从pts/1虚拟终端登陆的进程
16:53:19 up 1:51, 1 user, load average: 0.01, 0.11, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.190.1 15:02 7.00s 0.76s 0.01s w
四、计划任务
1. at
1.1 概述示例
一次性的计划任务
at [选项] [时间]
[root@localhost ~]# date
2024年 01月 04日 星期四 16:18:44 CST
[root@localhost ~]# at 16:20 #创建计划
at> touch /data/a<EOT> #计划内容,ctrl d提交
job 2 at Thu Jan 4 16:20:00 2024
[root@localhost ~]# atq #查看任务列表
2 Thu Jan 4 16:20:00 2024 a root
[root@localhost ~]# date
2024年 01月 04日 星期四 16:20:10 CST
[root@localhost ~]# ls /data
a
[root@localhost ~]# atrm 任务序列号 #删除任务
1.2 黑白名单
- 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
- 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
- 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
2. crontab
2.1 概述选项
周期性的计划任务
crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务,命令需要写绝对路径
如果不想写绝对路径需要在开头加上:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
选项 | 功能 |
---|---|
-u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
2.2 项目含义
[root@localhost ~]# cat /etc/crontab #查看crontab配置文件
项目 | 含义 | 范围 |
---|---|---|
第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
第二个"*" | 一天当中的第几小时(hour) | 0~23 |
第三个"*" | 一个月当中的第几天(day) | 1~31 |
第四个"*" | 一年当中的第几个月(month) | 1~12 |
第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
2.3 示例
每月的1号15号30号—— * * 1,15,30 * *
中午12点-16点每隔两小时 —— * 12-16/2 * * *
每半小时执行一次—— 30 * * * *
特殊符号 | 含义 |
---|---|
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。 |
2.4 删除计划任务
crontab -e 进入编辑器删除内容,类似于vim编辑器,编辑保存退出
crontab -r 删除计划任务
2.5 注意事项
- 5个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
- 在定义时间时,日期和星期最好不要在一条定时任务中出现,存在矛盾
- */30 * * * * /usr/bin/touch /data/ `date +\%F`,这里存在语法错误,%前面需要加转义符