目录
前言:
一、查看进程
1、查看静态的进程统计信息
⑴、查看进程常用组合选项
⑵、常见的进程运行状态有以下几种
2、查看进程动态信息
⑴、开头部分各字段含义
⑵、列表部分各字段含义
3、查询进程信息
4、查看进程树
二、控制进程
1、启动进程
⑴、手工启动进程
⑵、调度启动
2、改变进程的运行方式
⑴、挂起当前的进程
⑵、查看后台进程
(3)、将后台的进程恢复运行
3、终止进程执行
(1)、使用 kill 命令终止进程
(2)、使用 killall 命令终止进程
(3)、使用 pkill 命令终止进程
三、一次性计划任务
1、at一次性任务设置简介
2、at命令设置 计划任务
四、周期性任务设置
1、crontab的配置文件和目录
⑴、/etc/crontab——系统任务配置文件
⑵、/etc/eron.*/——系统默认设置 cron 任务的配置文件存放目录
⑶、/var/spool/cron/——用户 cron 任务的配置文件存放目录
2、使用crontab命令管理用户的计划任务
⑴、crontab计划任务列表配置格式
⑵、编辑用户的计划任务列表
(3)、查看用户的计划任务列表
(4)、删除用户的计划任务列表
总结:
生成环境中,不管去做任何事,都离不开进程,那么我们怎么去查看进程的详细信息,又怎么
去控制进程呢,这里将详细解读进程以及计划任务的管理。
程序:是保存在硬盘、光盘等外部存储介质中的可执行代码和数据,程序是静态集合保存的代
码。进程:是在CPU及内存中运行的程序代码,处于动态执行状态的计算机程序,在Linux系统
中,每个程序可以创建一个或多个进程。
ps命令用于显示包含当前运行的各进程完整信息的静态快照,常用的选项有如下:
选项 |
说明 |
a |
显示当前终端下的所有进程统计信息,包括其他用户的进程。与“x”选项结合时 将显示系统中所有的进程信息。 |
u |
使用以用户为主的格式输出进程信息 |
x |
显示当前用户在所有终端下的进程信息 |
-e |
显示系统内的所有进程信息 |
-l |
使用长格式(long)显示进程信息 |
-f |
使用完整的(full)格式显示进程信息 |
注意 |
ps命令部分选项是不带“-”,添加前缀前后含义会有出入,详细参考man手册。 |
①、命令“ps aux”,可以以简单列表的形式显示出进程信息
[root@localhost ~]# ps -aux (将以简单列表的形式显示出进程信息)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.3 193700 6832 ? Ss 09:41 0:00 /usr/lib/systemd/syst
root 2 0.0 0.0 0 0 ? S 09:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:41 0:00 [ksoftirqd/0]
……
root 3140 0.0 0.0 153148 1848 pts/0 R+ 09:56 0:00 ps -aux
[root@localhost ~]#
上述输出信息中,第一行为列标题,其中各字段的含义说明如下
◆USER:启动该进程的用户账号的名称
◆PID :该进程在系统中的数字ID号,在当前系统中是唯一的。
◆%CPU:CPU占用的百分比
◆%MEM:内存占用的百分比
◆VSZ:该进程使用的虚拟内存(swap空间)的大小(kb)
◆RSS :占用常驻内存(物理内存)的大小(kb)
◆TTY:表明该进程在哪个终端上运行。“ ?”表示未知或不需要的终端,不是从终端启动的进程也
显示为“?”。
◆STAT :该进程当前的状态。(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状
态,课被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态;z:僵尸进程,进程已
经终止,但是部分程序还在内存当中;)
◆START:启动该进程的时间。
◆TIME:该进程占用的 CPU 时间。
◆COMMAND:启动该进程的命令的名称。
②、命令“ps -elf” 将以长格式显示系统中的进程信息,并且包含更丰富的内容。注意这里选项不带
“-”会有不同的含义。
- [root@localhost ~]# ps -elf
- F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
- 4 S root 1 0 0 80 0 - 48425 ep_pol 10:38 ? 00:00:01 /usr/lib/s
- 1 S root 2 0 0 80 0 - 0 kthrea 10:38 ? 00:00:00 [kthreadd]
- 1 S root 3 2 0 80 0 - 0 smpboo 10:38 ? 00:00:00 [ksoftirqd
- 1 S root 5 2 0 60 -20 - 0 worker 10:38 ? 00:00:00 [kworker/0
- 1 S root 7 2 0 -40 - - 0 smpboo 10:38 ? 00:00:00 [migration
- 1 S root 8 2 0 80 0 - 0 rcu_gp 10:38 ? 00:00:00 [rcu_bh]
- ……
- 5 S root 8579 557 0 80 0 - 11911 ep_pol 15:29 ? 00:00:00 /usr/lib/s
- 0 R root 8580 8537 0 80 0 - 37766 - 15:29 pts/1 00:00:00 ps -elf
- [root@localhost ~]#
上述输出信息中,每个字段每列含义描述如下:
◆F:内核分配给进程的系统标记。
◆S:进程的状态。
◆UID:启动这些进程的用户。
◆PID: 进程的进程ID.
◆ PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
◆ C:进程生命周期中的CPU利用率。
◆ PRI:进程的优先级(越大的数字代表越低的优先级)。
◆ NI:谦让度值用来参与决定优先级。
◆ ADDR:进程的内存地址。
◆ SZ:假如进程被换出,所需交换空间的大致大小。
◆ WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
◆ STIME:进程启动时的系统时间。
◆ TTY:进程启动时的终端设备。 pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表
本地控制台终端
◆ TIME:运行进程需要的累计CPU时间。
◆ CMD:进程的启动命令。
③、命令“ps”,直接执行不带任何选项的ps命令时,将只显示当前用户会话中打开的进程。
[root@localhost ~]# ps
PID TTY TIME CMD
8537 pts/1 00:00:00 bash
8653 pts/1 00:00:00 ps
[root@localhost ~]#
④、需要查询某个进程的信息时可以结合管道操作和grep命令进程过滤。
[root@localhost ~]# ps -aux | grep bash
root 870 0.0 0.0 115256 908 ? S 09:06 0:00 /bin/bash /usr/sbin/ksmtuned
root 2004 0.0 0.0 51332 580 ? Ss 09:06 0:00 /usr/bin/ssh-agent /bin/sh -c ex
状态 |
含义 |
D |
不可被唤醒的睡眠状态,通常用于 I/O 情况。 |
R |
该进程正在运行。 |
S |
该进程处于睡眠状态,可被唤醒。 |
T |
停止状态,可能是在后台暂停或进程处于除错状态。 |
W |
内存交互状态(从 2.6 内核开始无效) |
X |
死掉的进程(应该不会出现)。 |
Z |
僵尸进程。进程已经中止,但是部分程序还在内存当中。 |
< |
高优先级(以下状态在 BSD 格式中出现)。 |
N |
低优先级。 |
L |
被锁入内存。 |
l |
多线程(小写 L)。 |
s |
包含子进程。 |
+ |
位于后台进程。 |
C |
进程占用CPU的百分比。 |
注:僵尸进程是指父进程退出,子进程没有退出,那么这些子进程就没有了父进程来管理,
就变成了僵尸进程。
top命令将会在当前终端以全屏交互式的界面显示进程排名,即使跟踪包括CPU、内存、交换
空间等系统占用情况,默认情况下每三秒刷新一次。Top命令将以动态刷新的方式显示各进程的状
态信息。
上述输出信息中,开头部分显示了系统任务(tasks)、CPU占用(sem)、交换空间
(swap)等汇总信息;汇总信息下方依次显示当前进程的排名情况。详解含义如下:
◆ 第一行15:42:06是指当前时间;up 5:03,是指系统运行时间(说明此服务器连续运行了5小
时3分钟);3 user,是指当前登陆用户数;load average: 0.00, 0.01, 0.05是指系统负载,即任务
队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。
◆ 系统任务(Tasks)信息:total,总进程数;running,正在运行的进程数;sleeping, 休眠
的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
◆ CPU 占用信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;
wa,I/O 等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。要了解空闲的 CPU
百分比,主要看%id 部分。
◆ 内存占用(Mem)信息:total,总内存空间;free,空闲内存;used,已用内存;
buff/cache,物理内存和交换内存的缓冲区总和。
◆ 交换空间(Swap)占用:total,总交换空间;free,空闲交换空间;used,已用交换空
间;avail Mem,可用物理空间。
◆ PID :进程 id。
◆ USER:进程所有者的用户名。
◆ PR:优先级(由内核动态调整),用户不能调整。
◆ NI:进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整。
◆ VIRT(virtual memory usage):虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ)
①、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
②、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量
◆ RES(resident memory usage):是进程所使用的物理内存。实际实用内存(ps 中标为 RSS)
RSS:常驻内存
①、进程当前使用的内存大小,但不包括 swap out
②、包含其他进程的共享
③ 、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
④、关于库占用内存的情况,它只统计加载的库文件所占内存大小
◆ SHR:共享内存大小,单位 kb SHR:shared memory 共享内存
①、除 M 了自身进程的共享内存,也包括其他进程的共享内存
②、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
③、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来
◆ S:进程状态。D=不可中断的睡眠状态;R=运行中或可运行S=睡眠中;T=已跟踪/已停止Z=僵
停。
◆ %CPU:上次更新到现在的 CPU 时间占用百分比
◆ %MEM:进程使用的物理内存百分比
◆ TIME+:进程使用的 CPU 时间总计,单位 1/100 秒
◆ COMMAND: 命令名/命令行
⑶、top 命令全屏交互界面快捷键:
快捷键 |
说明 |
P大写 |
根据CPU占用情况对进程列表进行排序 |
e |
根据CPU占用情况对进程列表进行排序 |
M |
根据内存占用情况进行排序 |
N |
根据启动时间进行排序 |
h |
可以获得 top 程序的在线帮助信息 |
q |
可以正常地退出 top 程序 |
1数字 |
显示每个内核的 CPU 使用率u/U:指定显示的用户 |
P小写 |
进程 IP,查看某个进程状态 |
T |
按时间排序 |
s |
修改刷新时间,默认 3s 刷新一次 |
k |
终止进程的运行 |
空格 |
立即刷新 |
注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在
top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信
息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二
次确认的提示信息,然后按Enter 键确认即可终止对应的进程。
pgrep命令用来查询特定进程信息的专用工具。pgrep命令可以根据进程的名称、运行该进程的
用户、进程所在的终端等多种属性查询特定进程的PID号。(使用ps命令查询某个进程PID信息
时,需要结合grep命令对输出结果进行过滤,很不方便。)
pgrep命令常用选项: |
|
选项 |
说明 |
l |
可同时输出对应的进程名以及PID |
U |
查询特定用户的进程 |
t |
查询在特定终端运行的进程 |
[root@localhost ~]# pgrep -l "bash"
9533 bash
9576 bash
9698 bash
[root@localhost ~]# pgrep -l -U root -t tty1
1612 X
[root@localhost ~]#
pstree命令可以输出Linux系统中各种进程的树形结构,更加直观地判断出各进程之间的相互关
系(父、子进程)。pstree命令默认情况下只显示各进程的名称。
pstree命令常用选项: |
|
选项 |
说明 |
p |
选项使用时可以同时列出对应的PID号 |
u |
选项可以列出对应的用户名 |
a |
选项可以列出完整的命令信息 |
执行“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整
命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”。
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,785
│ ├─{ModemManager},799
│ └─{ModemManager},814
├─NetworkManager,886 --no-daemon
│ ├─dhclient,7784 -d -q -sf /usr/libexec/nm-dhcp-helper -pf ...
│ ├─{NetworkManager},896
│ └─{NetworkManager},902
├─VGAuthService,782 -s
├─abrt-watch-log,818 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg-xD
……
……
可以由用户手工启动或者按预订计划调度启新的进程。
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否需要
占用当前的命令终端,手工启动又可以分为前台启动和后台启动。
进程在前台运行(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续
输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中
输入其他命令,而无需等待该进程结束,适用于运行耗时较长的操作。
启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接
放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。
[root@localhost b]# cp -r /etc/services /home/5 &
[1] 10250
[root@localhost b]#
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),
这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指定任务
运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均
在后台运行,不会占用用户的命令终端。
进程的调度启动可以通过 at、crontab 命令进行设置。其中 at 命令用于设置一次性(如12:15
时重启网络服务)计划任务;crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的
计划任务。
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进
程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例
如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行。
[root@localhost 5]# tar zcvf /home/5/usr.tar.gz /usr
tar: 从成员名中删除开头的“/”
/usr/
/usr/bin/
/usr/bin/orc-bugreport
/usr/bin/catchsegv
/usr/bin/gtar
/usr/bin/lzop
……
……
/usr/bin/eu-elfcompress
/usr/bin/seq
/usr/bin/gdb
^Z
[1]+ 已停止 tar zcvf /home/5/usr.tar.gz /usr
jobs命令可以查看当前终端中在后台运行的进程任务。结合选项“-l” 可以同时显示该进程对应
的PID号。
……
…… #省略……
/usr/bin/seq
/usr/bin/gdb
^Z #将当前进程挂起,调入后台并停止执行,也可用于暂停
[1]+ 已停止 tar zcvf /home/5/usr.tar.gz /usr
[root@localhost 5]#
[root@localhost 5]# jobs -l #查询当前终端中在后台运行的进程任务
[1]+ 12767 停止 tar zcvf /home/5/usr.tar.gz /usr
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的
任务恢复运行,继续在后台执行操作;
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。除非后台中的任
务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。
当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应
的情况下)。中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按
Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程
终止工具 kill、killall 和 pkill。
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该
进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9” 选项强行
终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用
“-9”选项。
[root@localhost 6]# pgrep -l "shd"
1205 sshd
11193 sshd
12559 sshd
[root@localhost 6]# kill 1205
[root@localhost 6]# pgrep -l "shd"
11193 sshd
12559 sshd
[root@localhost 6]#
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使
用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项。例如,执行如下的“killall -9
vim”命令可将所有名为 vim 的进程都强行终止。
[root@localhost aa]# jobs -l
[root@localhost aa]# vim testfile1
[1]+ 已停止 vim testfile1
[root@localhost aa]# vim testfile2
[2]+ 已停止 vim testfile2
[root@localhost aa]# jobs -l
[1]- 2823 停止 vim testfile1
[2]+ 2826 停止 vim testfile2
[root@localhost aa]# killall -9 vim
[root@localhost aa]# jobs -l
[1]- 2823 已杀死 vim testfile1
[2]+ 2826 已杀死 vim testfile2
[root@localhost aa]#
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特
定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,
使用起来非常方便。例如,若要终止由用户 kl 启动的进程(包括登录 Shell),可以执行以下操
作。
[root@localhost ~]# pgrep -l -U "kl" #确认目标进程相关信息
2881 bash
2935 vim
2962 su
[root@localhost ~]# pkill -9 -U "kl" #强行终止用户kl的进程
[root@localhost ~]# 已杀死
[root@localhost ~]# 登出
#可以通过pgrep -l -U "kl"确认目标进程已被终止
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定
的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已
安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功
能,并分别通过 at、crontab 命令进行计划任务设置。
使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经
运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正
确设置计划任务。设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作
为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将
进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl
+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
计划任务使用命令: |
|
at 时间/日期 |
任务设置为时间/日期时启动 |
atq |
查看计划任务列表 |
atrm |
删除指定编号的at任务 |
[root@localhost 5]# date #查看系统当前日期及时间
2021年 08月 17日 星期二 22:28:42 CST
[root@localhost 5]# at 22:40 #任务设置为22:40启动
at> rm -rf usr.tar.gz #任务设置完成后按ctrl+D组合键提交
job 4 at Tue Aug 17 22:40:00 2021
[root@localhost 5]# atq #查看已经有了之前设置的任务
4 Tue Aug 17 22:40:00 2021 a root
[root@localhost 5]# atrm 4 #删除第4条任务at计划任务
[root@localhost 5]# atq #确认第4条任务已经被删除
[root@localhost 5]#
使用crontab命令设置的计划任务可以按照预设的周期重复执行,减轻了设置重复性系统管理
任务的操作,由软件包croine提供crontab工具、系统服务crond和配置文件/etc/crontab。启用周期
性任务的前提是对应系统服务的crond必须已经运行。
crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。
/etc/crontab 文件中设置的是维护 Linux 操作系统所需的任务,由Linux 操作系统及相关程序
在安装时自动设置,不建议用户手动修改此文件。例如,该文件中包括设置 Shell 环境、可执行路
径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。执行如下的“cat
/etc/crontab”命令可以查看/etc/crontab 文件的具体内容
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash #设置执行计划任务的shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin #定义可执行命令及程序的路径
MAILTO=root #将任务输出信息发送到指定用户的邮箱
HOME=/ #执行计划任务时使用的主目录
# 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
[root@localhost ~]#
根据/etc/crontab 配置文件中的设定,crond 将按照不同的周期重复执行相应目录中的任务脚
本文件。
软件包crontabs 安装后,会在/etc/eron.*/目录下生成存放一些系统默认设置的计划任务目
录,设置了系统每个小时、每一天做些什么工作。如“/etc/eron. hourly “目录下存放的是系统每小时
要做的任务脚本;“/etc/cron.daily”目录下存放的是系统每天要做的任务脚本;“/etc/cron.weekly/”与
“/etc/cron.monthly/”目录下分别存放的是系统每周、每月要做的任务脚本。值得注意的是这些目录
中包含的是可执行脚本,而不是cron配置文件,crond服务通过 rnu-parts 工具调用执行这些脚本文
件,所以要确保位于这些目录位置下的脚本具有可执行权限,否则不能运行。
由用户自行设置(使用 crontab 命令)的 cron 计划任务将被保存到目录/var/spool/cron/ 中,
当用户使用crontab命令创建计划任务,就会在/var/spool/cron/目录下生成一个与用户名相同的文
件。root 用户的 cron 计划任务保存在配置文件/var/spool/cron/root 中。
[root@localhost ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 277 8月 18 00:14 /var/spool/cron/root
crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及 /var/spool/cron/目录中的改
变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启
动 crond 守护进程就可以使设置生效。
执行“crontab -e”命令后,将打开计划任务编辑界面(与vi中的操作相同).通过该界面用户可以
自行添加具体的任务配置,每一行代表一个记录,配置格式与/etc/crontab文件中的主体类似。配
置格式如下:
字段 |
说明 |
分钟 |
取值为 0~59 的任意整数 |
小时 |
取值为 0~23 的任意整数 |
日期 |
取值为 1~31 的任意整数(日期在该月份中必须有效) |
月份 |
取值为 1~12 的任意整数 |
星期 |
取值为 0~7 的任意整数,0 或 7 代表星期日 |
命令 |
可以是普通的命令,也可以是自己编写的程序脚本 |
其中还有使用“-”(减号)、“,”(逗号)、“/”(斜杠)、 “*”(星号)与数字构成表达式来表
示较复杂的时间关系。
◆ 使用“*”时表示取值范围中的任意时间。
◆ 减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。
◆ 逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
◆ 斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的
计划任务管理操作。常用的选项如下。
选项 |
说明 |
-e |
编辑计划任务列表。 |
-u |
指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。 |
-l |
列表显示计划任务。 |
-r |
删除计划任务列表。 |
项目中使用参考如下:
项目需求:添加任务内容如下:①每天早上 7:50自动开启 sshd 服务,22:50 关闭 sshd 服
务;②每隔五天清空一cron次FTP 服务器公共目录/var/ftp/pub 中的数据;③每周六的 7:30 重新启
动系统中的 httpd 服务;④每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目
录,则可由 root 用户通过 crontab 设置以下计划任务。
[root@localhost ~]# crontab -e #进入计划任务编辑界面
在计划任务编辑界面中编辑如下:
50 7 * * * /usr/bin/systemctl start sshd.service (#每天早上 7:50自动开启 sshd 服务 )
50 22 * * * /usr/bin/systemctl stop sshd.service (#每天22:50 自动关闭 sshd 服务)
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/* (#每隔五天清空一cron次FTP 服务器公共目录/var/ftp/pub 中的数据)
30 7 * * 6 /usr/bin/systemctl httpd restart (#每周六的 7:30 重新启动系统中的 httpd 服务)
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/ (#每周一、周三、周五的下午 17:30,使用 tar 命令自动备份/etc/httpd 目录)
*/2 * * * * ls -lh /home/* #每隔两分钟查看一次home下面
~
~
:wq #保存并退出
[root@localhost ~]#
您在 /var/spool/mail/root 中有新邮件 #可以看到每隔2分钟会有消息显示
[root@localhost ~]#
注意:普通用户执行“crontab -e -u 用户名”命令时,可以设置自己的计划任务(需要注意命令
的执行权限)。 因各条计划任务在执行时并不需要用户登录,所以任务配置记录中的命令建议使
用绝对路径,以避免因缺少执行路径而无法执行命令的情况。另外,在设置非每分都执行的任务
时,“分钟”字段也应该填写一个具体的时间数值,而不要保留为默认的“*”,否则将会在每分钟执行
一次计划任务。
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结
合“-u”选项查看其他用户的计划任务。
[root@localhost ~]# crontab -l #查看用户root自己的计划任务
0 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.service
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
*/2 * * * * ls -lh /home/*
[root@localhost ~]# crontab -l -u kl #查看用户kl的计划任务
no crontab for kl
[root@localhost ~]#
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户
的所有计划任务,可以执行“crontab -r”命令。
[root@localhost ~]# crontab -r #清空root用户的所有计划任务
您在 /var/spool/mail/root 中有新邮件
[root@localhost ~]# crontab -l #查看计划任务列表
no crontab for root #没有任务
[root@localhost ~]#