进程和计划任务管理

进程、线程、进程的前台后台、任务计划、僵尸任务
ps、top、pgrep、pstree、后台&、fg、jobs、at、crontab
程序
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
进程
在CUP及内存中运行的程序代码,动态执行的代码
存在生命周期
都由其父进程创建     ,     父、子进程
每个程序可以创建一个或多个进程
进程 ID Process ID PID )号码被用来标记各个进程
UID GID 语境决定对文件系统的存取和访问权限 通常从执行进程的用户来继承
线程
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。 一 个进程可以有一个或多个线程 ,各个线程之间共享程序的内存空间( 也就是所在进程的内存空间 ) 。一个标准的线程由线程ID 、当前指令指针 (PC) 、寄存器和堆栈组成。而进程由内存空间 ( 代码、数据、进程空间、打开的 文件) 和一个或多个线程组成

ps命令      查看静态的进程统计信息
常用的参数
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u:使用以用户为主的格式输出进程信息。
-x:显示当前用户在所有终端下的进程信息。

常用的选项组合
ps   -aux        #将以简单列表的形式显示出进程信
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的。
%CPU:CPU 占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
   简说:pts 是远程登录终端 ctrl+ALT F1-F6   tty1 图像界面   2和6 字符界面    ? 系统本身自身执行的进程

STAT:该进程的状态
D:不可中断的休眠状态
T:停止状态,可能是在后台暂停或进程处于跟踪调试状态
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号唤醒。
Z :僵尸进程,进程已经中止,但是部分程序还在内存当中

<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
D:系统守护进程

START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称

例1

查看进程状态[root@benet ~]# vim a.txt                  (在另一个终端执行:)
[root@benet ~]# ps -aux | grep a.txt          #查看状态 S 表示睡眠状态, + 表示前台
root    4435 0.0   0.2 151752    5292 pts/1    S+    20:52    0:00 vim a.txt
root    4661 0.0   0.0 112676    996 pts/0    S+    21:05    0:00 grep --color=auto a.txt
在 vim a.txt 这个终端上 按下: ctrl+z [1]+   已停止    vim a.txt 在另一个终端执行:


[root@benet ~]# ps -aux | grep a.txt     #查看状态 T 表示停止状态
root    4435 0.0   0.2 151752    5292 pts/1    T    20:52    0:00 vim a.txt
root    4675 0.0   0.0 112676    996 pts/0    S+    21:05    0:00 grep --color=auto a.txt


注:
ctrl-c 是发送 SIGINT 信号,终止一个进程
ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销


例2      D 不可中断状态
[root@xuegod63 ~]# tar   -zcvf   usr-tar.gz   /usr/
#然后在另一个终端不断查看状态,由 S+,R+变为 D+

方法二
ps -elf         #将以长格式显示系统中的进程信息

-e:显示系统内的所有进程信息。  -l:使用长格式显示进程信息。-f:使用完整的格式显示进程信息。
各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。   pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。

进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比

僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程

进程消耗相应的资源 cpu利用率 内存使用率 磁盘使用率
[root@centos7 ~]#bash
[root@centos7 ~]#echo $BASHPID
1809
[root@centos7 ~]#echo $PPID
1436
[root@centos7 ~]#kill  -19  1436              将父进程设为停止态
[root@centos7 ~]#kill  -9  1809                杀死子进程,使其进入僵尸态
[root@centos7 ~]#ps   -aux                      可以看到上面图示的结果,STAT为Z,表示为僵尸态
#方法1:恢复父进程
[root@centos7 ~]#kill  -18   1436
#方法2:杀死父进程
[root@centos7 ~]#kill   -9   1436
[root@centos7 ~]#ps   -aux                      再次观察,可以僵尸态的进程不存在了

恢复父进程


top命令-查看进程动态信息
上述输出信息中,开头的部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
uptime
13:22:30    当前时间
up 20days    系统运行时间 ,说明此服务器连续运行 20 天了
2 user    当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。 三个数值分别为 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,可用物理空间。

详细说明

Tasks: 481 total    进程总数
1 running    正在运行的进程数
480 sleeping    睡眠的进程数
0 stopped    停止的进程数
0 zombie    僵尸进程数
Cpu(s): 0.0% us    系统用户进程使用 CPU 百分比。
0.0% sy    内核中的进程占用 CPU 百分比    优先级调度占用
0.0% ni    用户进程空间内改变过优先级的进程占用 CPU 百分比
98.7% id    空闲 CPU 百分比

0.0% wa    
cpu 等待 I/0 完成的时间总量。
测试:
终端 1:执行:top
终端 2:dd if=/dev/zero of=/a.txt count=10 bs=100M
终端 3:dd if=/dev/zero of=/a.txt count=10 bs=100M 

0.0% hi(了解) 硬中断消耗时间       硬件中断占用
硬中断,占的 CPU 百分比。
1. 硬中断是由硬件产生的,比如,像磁盘, 网卡,键盘,时钟等。每个设备或设备集都有它自己的 IRQ(中断请求)。基于 IRQ,CPU 可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。# hi ->
Hardware IRQ: The amount of time the CPU has been servicing hardware interrupts.

0.0% si(了解) 软中断消耗时间     软件中断占用
软中断,占的 CPU 百分比。
1. 通常,软中断是一些对 I/O 的请求。这些请求会调用内核中可以调度 I/O 发生的程序。对于某些设备,I/O 请求需要被立即处理,而磁盘 I/O 请求通常可以排队并且可以稍后处理。根据 I/O 模型的不同,进程或许会被挂起直到 I/O 完成,此时内核调度器就会选择另一个进程去运行。I/O 可以在进程之间产生并且调度过程通常和磁盘 I/O 的方式是相同。# si -> Software Interrupts.: The amount of time the CPU has been servicingsoftware interrupts.

0.0 st (steal 偷)    虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分。
st:虚拟机偷取物理的时间。比如:物理机已经运行了 KVM,XEN 虚拟机。KVM 虚拟机占用物理机的 cpu 时间


Mem: 2033552k total    物理内存总量
340392k used    使用的物理内存总量
1376636k free    空闲内存总量
316524k buff/cache    用作内核缓存的内存量。和 free -k 一个意思
Swap: 2017948k total    交换区总量
0k used    使用的交换区总量
192772k free    空闲交换区总量
1518148 avail Mem    总的可利用内存是多少

 7 行进程信息

PID    进程 id
USER    进程所有者的用户名
PR    优先级(由内核动态调整),用户不能
NI    进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整

VIRT(virtual memory usage)    虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量
RES(resident memory usage)    是进程所使用的物理内存。实际实用内存(ps 中标为 RSS) RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out
2、包含其他进程的共享
3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR    共享内存大小,单位 kb SHR:shared memory 共享内存
1、除 M 了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out 后,它将会降下来
S    进程状态。
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵停

%CPU    上次更新到现在的 CPU 时间占用百分比
%MEM    进程使用的物理内存百分比
TIME+    进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND    命令名/命令行

top 命令全屏操作界面快捷键
默认 3s 刷新一次 ,    按 s 修改刷新时间         按空格 :立即刷新。    


P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。

pgrep  命令查询进程信息
常用的参数
-l:   选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程

例1
pgrep   -l   "log"

例2
 pgrep   -l   -U   teacher   -t   tty1


pstree  命令以树形结构列出进程信息
pstree 命令默认情况下只显示各进程的名称,
结合以下常用的参数使用:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息


 执行如下的“pstree -aup”命令可以查看当前系统的进程树,包括各进程对应的PID 号、用户名、完整命令等信息。从输出结果中可以看出,systemd 进程确实是 Linux 操作系统中所有进程的“始祖”


例1
pstree   -aup   yss


控制进程

(1)手工启动进程
由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否  需要占用当前的命令终端,手工启动又可以分为前台启动后台启动
进程在前台运行(如执行“ls -l”命令)时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令,大多数命令操作在前台启动运行进程在后台运行时,用户可以继续在当前终端中输入其他命令,而无须等待该进程结束,适用于运行耗时较长的操作。

启动后台进程需要使用“&”操作符,将“&”操作符放在要执行命令的最后面,进程启动后会直接放入后台运行,而不占用前台的命令操作界面,方便用户进行其他操作。例如,当使   用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作

cp   /dev/cdrom   /home/cetos7.iso  &


调度启动
在服务器维护工作中,经常需要执行一些比较费时而且较占用资源的任务(如数据备份),这些任务更适合在相对空闲的时候(如夜间)进行。这时就需要用户事先进行调度安排,指 定任务运行的时间,当系统到达设定时间时会自动启动并完成指定的任务。调度启动的计划 任务进程均在后台运行,不会占用用户的命令终端。
进程的调度启动可以通过 at、crontab 命令进行设置,其中 at 命令用于设置一次性(如12:15 时重启网络服务)计划任务,crontab 命令用于设置周期性运行(如每周五 17:30 备份数据库)的计划任务。

进程的前后台调度

(1)挂起当前的进程
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行

tar zcvf usr.tar.gz /usr

jobs  命令查看处于后台的任务列表
常用的参数

-l:选项可以同时显示该进程对应的PID号


(3)将后台的进程恢复运行
使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作

为参数。例如,执行如下的“fg 1”命令可以将之前挂起至后台的 wget 进程重新调入前台执行

[root@localhost ~]# jobs
[1]-   Stopped                 cp /dev/cdrom mycd.iso 
[2]+  Stopped                 top
[root@localhost ~]# fg 1

3.终止进程执行
当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)。
中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按 Ctrl+C 组合键无法终止程序或者需要结束在其他终端或后台运行的进程时, 可以使用专用的进程终止工具 kill、killall 和 pkill。
(1)使用 kill 命令终止进程
通过 kill 命令终止进程时,需要使用进程的 PID 号作为参数。无特定选项时,kill 命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合“-9”    选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用“-9”选项。
例如,若 SSH 服务的 sshd 进程的 PID 号为 5822,则执行“kill 5822”命令后可以将进程 sshd 终止

[root@localhost ~]# pgrep -l "sshd"    //查询目标进程的PID 号
5822 sshd
[root@localhost ~]# kill 5822    //终止指定PID 的进程
[root@localhost ~]# pgrep -l "sshd"    //确认进程已终止(查询时无结果


对于无法正常终止的系统进程,在必要时可以结合“-9”选项强制终止。例如,以下操作展示了强制终止 vim 进程的过程    为弄出

[root@localhost ~]# vim testfile  &    //打开vim 程序并挂起作为测试
[1]+   Stopped    vim testfile
[root@localhost ~]# jobs –l    //查询目标进程的PID 号
[1]+   7095 Stopped    vim testfile

[root@localhost ~]# kill 7095        //尝试正常结束进程
[root@localhost ~]# jobs -l            //但发现vim 进程并未退出
[1]+   7095 Stopped    vim tmpfile
[root@localhost ~]# kill -9 7095        //强制终止目标进程
[root@localhost ~]# jobs -l        //成功终止vim 进程
[1]+ 2993  已 杀死    vim tmpfile


(2)使用 killall 命令终止进程
使用 killall 命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall 命令将更加方便,效率更高。killall 命令同样也有“-9”选项。例如,执行如下的“killall -9 vim”命令可将所有名为 vim 的进程都强行终止

[root@localhost ~]# vim testfile1 &     //挂起第 1 个 vim 测试进程
[1]+   Stopped    vim testfile1
[root@localhost ~]# vim testfile2 &    //挂起第 2 个 vim 测试进程
[2]+   Stopped    vim testfile2
[root@localhost ~]# jobs -l        //确认待终止的进程信息[1]-   7144 Stopped    vim testfile1
[2]+   7153 Stopped    vim testfile2
[root@localhost ~]# killall -9 vim    //通过进程名终止多个进程
[root@localhost ~]# jobs -l
[1]-   7144 Killed    vim testfile1
[2]+   7153 Killed    vim testfile2

(3)使用 pkill 命令终止进程
使用 pkill 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端) 等选项,使用起来非常方便。例如,若要终止由用户 hmj 启动的进程(包括登录 Shell),可以执行以下操作。
su - hmj
vim tst.txt &
[root@localhost ~]# pgrep –l -U "hmj"    //确认目标进程相关信息3773 bash
[root@localhost ~]# pkill -9 -U "hmj"    //强行终止用户hackli 的进程
[root@localhost ~]# pgrep -l -U "hmj"    //确认目标进程已被终止

计划任务管理   at

一次性计划任务
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置


使用at命令设置的计划任务只在指定的时间点执行一次,前提是对应的系统服务atd必须已经运行。需要注意的是,计划执行任务的时间、日期必须安排在当前系统的时刻之后,否则将无法正确设置计划任务。
设置一次性计划任务时,在 at 命令行中依次指定计划执行任务的时间、日期作为参数(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按 Ctrl+D 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。
例如,以下操作先通过 date 命令确认当前的系统时间,并设置在 2017 年 5 月 7 日的10:35 自动执行以下任务:统计该时间点系统中由 root 用户运行的进程的数量,并将该数值保存到/tmp/ps.root 文件中。

at  [HH:MM]  [yyyy-mm-dd]
任务设置完毕后按Ctrl+D 组合键提交
例1
[root@kgc /]# date
2021年 08月 16日 星期一 16:20:58 +00
[root@kgc /]# at 16:23 2021-08-16
at> pgrep -U root | wc -l > /tmp/ps.root        //任务设置完毕后按Ctrl+D 组合键提交
at> <EOT><EOT>
job 1 at Mon Aug 16 16:23:00 2021

atq             //查看计划任务

[root@localhost ~]# cat   /tmp/ps.root    //等过了计划时间后验证命令结果202

例2

以下操作将设置一条计划任务,在当天的 21:30 自动关闭当前系统。
[root@localhost ~]# at 21:30
at> shutdown -h now     
          //Ctrl+D
at> <EOT>
对于已经设置但还未执行(未到时间点)的计划任务,可以通过 atq 命令进行查询。但已执行过的 at 任务将不会再出现在列表中。具体操作如下:

[root@localhost ~]# atq      //查看计划任务
2 Sun May 7 21:30:00 2017 a root

若要删除指定编号的 at 任务,可以使用 atrm 命令。删除后的 at 任务将不会被执行, 并且不会显示在 atq 命令的显示结果中,但已经执行过的任务无法删除。具体操作如下:

[root@localhost ~]# atrm 2    //删除第 2 条 at 计划任务
[root@localhost ~]# atq    //确认第 2 条任务已被删除

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                            //将任务输出信息发送到指定用户的邮箱


根据/etc/crontab 配置文件中的设定,crond 将按照不同的周期重复执行相应目录中的任务脚本文件。
(2)/var/spool/cron/——用户 cron 任务的配置文件存放目录
由用户自行设置(使用 crontab 命令)的 cron 计划任务将被保存到目录/var/spool/cron/ 中,文件名与用户名相同。例如,通过如下操作可以得知,root 用户的 cron 计划任务保存在配置文件/var/spool/cron/root 中。


[root@localhost ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 33 May 7 11:01 /var/spool/cron/root

crond 守护进程会自动检查/etc/crontab 文件、/etc/cron.d/目录及 /var/spool/cron/目录中的改变,如果发现有配置更改,它们就会被载入内存,所以当某个 crontab 文件改变后并不需要重新启动 crond 守护进程就可以使设置生效


2.使用 crontab 命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-l:列表显示计划任务。
-r:删除计划任务列表。
下面将分别讲解 crontab 命令相关选项的使用。

crontab -e                        #编辑cron服务

crontab -u 用户名             #指定XX用户的cron服务
crontab -l                         #列出当前用户下的cron的详细内容
crontab -u zx -l                 #列出zx用户下的cron的详细内容
crontab -r                         #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
crontab -r -u zx                #删除zx用户的cron内容

journalctl -xe                //查看计划任务

由于各字段的作用不同,其取值范围也不一样,如表 9-2 所示,当使用“*”时表示取值范围中的任意时间。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 天。


例如,若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上 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 
50 22 * * * /usr/bin/systemctl stop sshd.servic 
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/*


普通用户执行“crontab -e”命令时,可以设置自己的计划任务(需要注意命令的执行权限)。
例如,用户 jerry 设置一条计划任务:在每周日晚上的 23:55 将/etc/passwd 文件的内容复制到宿主目录中,保存为 pwd.txt 文件,具体操作如下:
[jerry @localhost ~]# crontab -e
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt


因各条计划任务在执行时并不需要用户登录,所以任务配置记录中的命令建议使用绝对路径,以避免因缺少执行路径而无法执行命令的情况。另外,在设置非每分都执行的任务时,    “分钟”字段也应该填写一个具体的时间数值,而不要保留为默认的“*”,否则将会在每分钟执行一次计划任务。
(2)查看用户的计划任务列表
crontab 命令结合“-l”选项可以查看当前用户的计划任务列表,对于 root 用户来说,还可以结合“-u”选项查看其他用户的计划任务,具体操作如下:

[root@localhost ~]# crontab –l    //查看用户root 自己的计划任务
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.servic 
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/
[root@localhost ~]# crontab -l -u jerry    //查看用户jerry 的计划任务
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt 
[root@localhost ~]# ls -l /var/spool/cron/jerry
-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/jerry


(3)删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令。
[jerry@localhost ~]$ crontab -r     //用户jerry 清空自己设置的计划任务

[jerry@localhost ~]$ crontab -l
[jerry@localhost ~]$ crontab -l
no crontab for jerry


案列
21 17 * * * /usr/bin/systemctl reboot
26 17 * * * /usr/bin/cp -r /etc/ /home/
#0 8-18/2 * * * /usr/binsystemctl start vsfrpd.service
0 * */3 * * /usr/bin/rm -rf /var/log/ftp/*.log
*/2 * * * * /usr/bin/systemctl start vsfrpd.service


[root@192 home]# crontab -l -u lisi
17 19 * * * /usr/bin/cp -r /home/etc/ /home/lisi/backup/

journalctl -xe                //查看计划任务

扩展

========================压力测试工具========================
yum install -y epel-release
yum install -y stress
stress    :https://www.cnblogs.com/jiftle/p/12904248.html
sysstat
httpd-tools
ab
curl


总结

ps  -aux  elf top  pgrep pstree

启动进程
前台启动  输入指令 直接执行程序
后台启动 在命令后 加入 & 符号

调度进程 
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号

终止进程
Ctrl+C组合键
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程
-9选项用于强制终止

 pkill命令
根据特定条件终止相应的进程
常用命令选项
 -U:根据进程所属的用户名终止相应进程
 -t:根据进程所在的终端终止相应进程


计划任务
一次性计划任务 at  atq 查看   atrm 删除

crontab计划任务的配置字段
按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
 全局配置文件,位于文件:/etc/crontab 
 系统默认的设置,位于目录:/etc/cron.*/
 用户定义的设置,位于文件:/var/spool/cron/用户名


管理计划任务命令
编辑
crontab  -e  [-u  用户名]
查看
crontab  -l  [-u  用户名]
删除
crontab  -r  [-u  用户名]

分钟    取值为从0到59之间的任意整数 
小时    取值为从0到23之间的任意整数 
日期    取值为从1到31之间的任意整数
月份    取值为从1到12之间的任意整数
星期    取值为从0到7之间的任意整数,0或7代表星期日
命令    要执行的命令或程序脚本 

时间数值的特殊表示方法
* 表示该范围内的任意时间
, 表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/ 指定间隔的时间频率
 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值