进程和计划任务管理

目录

前言:

一、查看进程

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系统

中,每个程序可以创建一个或多个进程。

1、查看静态的进程统计信息

        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” 将以长格式显示系统中的进程信息,并且包含更丰富的内容。注意这里选项不带

“-”会有不同的含义。
 

  1. [root@localhost ~]# ps -elf
  2. F S UID      PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
  3. 4 S root      1      0  0  80   0 - 48425 ep_pol 10:38 ?        00:00:01 /usr/lib/s
  4. 1 S root      2      0  0  80   0 -     0 kthrea 10:38 ?        00:00:00 [kthreadd]
  5. 1 S root      3      2  0  80   0 -     0 smpboo 10:38 ?        00:00:00 [ksoftirqd
  6. 1 S root      5      2  0  60 -20 -     0 worker 10:38 ?        00:00:00 [kworker/0
  7. 1 S root      7      2  0 -40   - -     0 smpboo 10:38 ?        00:00:00 [migration
  8. 1 S root      8      2  0  80   0 -     0 rcu_gp 10:38 ?        00:00:00 [rcu_bh]
  9. ……    
  10. 5 S root    8579    557  0  80   0 - 11911 ep_pol 15:29 ?        00:00:00 /usr/lib/s
  11. 0 R root    8580   8537  0  80   0 - 37766 -      15:29 pts/1    00:00:00 ps -elf    
  12. [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

(2)、常见的进程运行状态有以下几种

状态

含义

D

不可被唤醒的睡眠状态,通常用于 I/O 情况。

R

该进程正在运行。

S

该进程处于睡眠状态,可被唤醒。

T

停止状态,可能是在后台暂停或进程处于除错状态。

W

内存交互状态(从 2.6 内核开始无效)

X

死掉的进程(应该不会出现)。

Z

僵尸进程。进程已经中止,但是部分程序还在内存当中。

<

高优先级(以下状态在 BSD 格式中出现)。

N

低优先级。

L

被锁入内存。

l

多线程(小写 L)。

s

包含子进程。

+

位于后台进程。

C

进程占用CPU的百分比。

        注:僵尸进程是指父进程退出,子进程没有退出,那么这些子进程就没有了父进程来管理,

就变成了僵尸进程。

2、查看进程动态信息

       top命令将会在当前终端以全屏交互式的界面显示进程排名,即使跟踪包括CPU、内存、交换

空间等系统占用情况,默认情况下每三秒刷新一次。Top命令将以动态刷新的方式显示各进程的状

态信息。

进程和计划任务管理_第1张图片

        上述输出信息中,开头部分显示了系统任务(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 键确认即可终止对应的进程。

3、查询进程信息

       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 ~]#

4、查看进程树

       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
……
……

二、控制进程

1、启动进程

        可以由用户手工启动或者按预订计划调度启新的进程。

(1)、手工启动进程

        由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否需要

占用当前的命令终端,手工启动又可以分为前台启动和后台启动。

        进程在前台运行(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续

输入其他命令,大多数命令操作在前台启动运行。进程在后台运行时,用户可以继续在当前终端中

输入其他命令,而无需等待该进程结束,适用于运行耗时较长的操作。

        启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接

放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。

[root@localhost b]# cp -r /etc/services /home/5 &

[1] 10250

[root@localhost b]#

⑵、调度启动

        在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),

这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指定任务

运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均

在后台运行,不会占用用户的命令终端。

        进程的调度启动可以通过 at、crontab 命令进行设置。其中 at 命令用于设置一次性(如12:15

时重启网络服务)计划任务;crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的

计划任务。

2、改变进程的运行方式

⑴、挂起当前的进程

       当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

(3)、将后台的进程恢复运行

        使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的

任务恢复运行,继续在后台执行操作;

        使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。除非后台中的任

务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数。

3、终止进程执行

        当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应

的情况下)。中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按

Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程

终止工具 kill、killall 和 pkill。

(1)、使用 kill 命令终止进程

        通过 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]#

(2)、使用 killall 命令终止进程

        使用 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]#

(3)、使用 pkill 命令终止进程

        使用 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"确认目标进程已被终止

三、一次性计划任务

1、at一次性任务设置简介

        在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定

的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已

安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功

能,并分别通过 at、crontab 命令进行计划任务设置。

        使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经

运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正

确设置计划任务。设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作

为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将

进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl

+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。

2、at命令设置 计划任务

计划任务使用命令:

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必须已经运行。

1、crontab的配置文件和目录

        crond 通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置。

(1)、/etc/crontab——系统任务配置文件

        /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 将按照不同的周期重复执行相应目录中的任务脚

本文件。

⑵、/etc/eron.*/——系统默认设置 cron 任务的配置文件存放目录

        软件包crontabs 安装后,会在/etc/eron.*/目录下生成存放一些系统默认设置的计划任务目

录,设置了系统每个小时、每一天做些什么工作。如“/etc/eron. hourly “目录下存放的是系统每小时

要做的任务脚本;“/etc/cron.daily”目录下存放的是系统每天要做的任务脚本;“/etc/cron.weekly/”与

“/etc/cron.monthly/”目录下分别存放的是系统每周、每月要做的任务脚本。值得注意的是这些目录

中包含的是可执行脚本,而不是cron配置文件,crond服务通过 rnu-parts 工具调用执行这些脚本文

件,所以要确保位于这些目录位置下的脚本具有可执行权限,否则不能运行。

⑶、/var/spool/cron/——用户 cron 任务的配置文件存放目录

         由用户自行设置(使用 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 守护进程就可以使设置生效。

2、使用crontab命令管理用户的计划任务

⑴、crontab计划任务列表配置格式

       执行“crontab -e”命令后,将打开计划任务编辑界面(与vi中的操作相同).通过该界面用户可以

自行添加具体的任务配置,每一行代表一个记录,配置格式与/etc/crontab文件中的主体类似。配

置格式如下:

进程和计划任务管理_第2张图片

 

字段

说明

分钟

取值为 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  用户名”命令时,可以设置自己的计划任务(需要注意命令

的执行权限)。 因各条计划任务在执行时并不需要用户登录,所以任务配置记录中的命令建议使

用绝对路径,以避免因缺少执行路径而无法执行命令的情况。另外,在设置非每分都执行的任务

时,“分钟”字段也应该填写一个具体的时间数值,而不要保留为默认的“*”,否则将会在每分钟执行

一次计划任务。

(3)、查看用户的计划任务列表

        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 ~]#

(4)、删除用户的计划任务列表

        当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户

的所有计划任务,可以执行“crontab -r”命令。

[root@localhost ~]# crontab -r          #清空root用户的所有计划任务
您在 /var/spool/mail/root 中有新邮件
[root@localhost ~]# crontab -l          #查看计划任务列表
no crontab for root                   #没有任务
[root@localhost ~]#

总结:

你可能感兴趣的:(linux)