Linux基础知识与实操-篇八:定期任务执行与进程任务处理
创始人
2024-03-09 00:46:17

文章目录

  • 例行工作安排
    • 单一工作安排
    • 循环执行的任务
    • 注意事项
    • 唤醒停机期间的任务
  • 进程任务处理
    • 任务管理`job control`
      • 后台执行
    • 进程管理
    • 进程的执行顺序
    • 系统资源查看
    • 特殊文件与进程
  • 最后

例行工作安排

类似于定时任务、系统安排的任务提醒等

一般在任务中,有两个类型:

  • 例行性:每个一定的周期就需要执行的事项
    crontab 指令 处理循环执行的指令
  • 突发性:做完以后就没有了
    at 指令 处理仅执行一次就结束的指令

单一工作安排

要使用单一工作安排,就需要Linux系统上面必须有负责这个安排的服务,即atd 服务:
下面是我本机的 atd服务情况:
image

如果不是这个状态,就使用下面的命令处理:

#重新启动atd服务
systemctl restart atd# 服务开机自启
systemctl enable atd# 查看atd目前状态
systemctl status atd

有了该服务的支持,就可以实现 单次的工作安排at 命令了:at 指令产生需要运行的工作,并将这个工作以文本文件的形式写入/var/spool/at/ 目录内,该工作便能等待atd 这个服务的取用与执行了

处于安全考虑,由 /etc/at.allow/etc/at.denv 这两个文件来限制at 的使用,在这两个文件的限制下,at 的执行流程如下:
image

/etc/at.allow 文件的管理较为严格,/etc/at.deny较为松散
一般系统都是保留空的/etc/at.deny文件,即允许所有人使用at 指令。

at [-mldv] TIME 
at -c 工作号码-m  当at工作完成后,即使没有输出信息,也以 email通知使用者,该工作已经完成
-l  相当于atq,列出目前系统上所有该用户的at安排
-d  相当于atrm,可以取消一个在at中的安排
-v  可以使用较为明显的时间格式列出任务列表
-c  可以列出后面接的该选项工作的实际指令内容TIME: 时间格式, 这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
HH:MM 		ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过, 则明天的 HH:MM 进行此工作。HH:MM YYYY-MM-DD 		ex> 04:00 2015-07-30
强制规定在某年某月的某一天的特殊时刻进行该工作!HH:MM[am|pm] [Month] [Date] 		ex> 04pm July 30
也是一样, 强制在某年某月某日的某时刻进行!HH:MM[am|pm] + number [minutes|hours|days|weeks]ex> now + 5 minutes ex> 04pm + 3 days
就是说,在某个时间点『再加几个时间后』才进行。

image

此外,使用at安排的工作,系统会将该选项at工作独立出bash环境,直接交给系统的atd 程序接管,因此当下达了at 的工作之后就可以立即脱机了,剩下的工作就完全交给Linux管理即可。

如果输入了错误的指令,可以通过atq 查看安排,并通过 atrm 进行移除

# 查看项目安排
atq
# 移除项目
atrm (jobnumber)

循环执行的任务

at 执行的任务限制类似,也需要下面两个文件限制使用者账号:
image

当用户使用功能contab 建立工作安排后,该项工作就被记录到/var/spool/cron中了,并且是以 账号 来作为判别的依据。

所以如果怀疑 系统中被植入了木马,就可以考虑查看var/log/cron 这个文件中是否有木马程序在执行

crontab [-u username] [-ll-el-r]-u  只有root用户才可以执行这个任务,即帮助其他使用者建立/移除 crontab 工作安排
-e  编辑 crotab的工作内容
-l  查询crontab的工作内容
-r  移除所有的crontab 的工作内容,如果要仅仅移除一项,就可以使用-e去编辑

每项工作都有六个字段,这六个字段的含义如下:
image

image

如果是系统的例行性人物,可以直接编辑/etc/crontab文件实现 设置定时任务,只要编辑完该文件,将这个修改保存,cron的设定就会自动执行(如果没有马上执行,那么就需要重新启动crond服务:systemctl restart crond)
image

crond服务读取配置文件的位置

一般是从如下三个地方读取配置文件:

  • /etc/crontab
  • /etc/cron.d/*
  • /var/spool/cron/*

如果需要自己开发新的软件,该软件要拥有自己的crontab定时指令时,就可以将 配置文件放置到 /etc/cron.d 目录下
image

注意事项

在使用 上面的命令安排 例行操作时,要注意以下几点:

  • 避免资源分配不均
    image
  • 取消不必要的输出
    可以将错误信息重定向到/dev/null
  • 安全检验
  • 周 和 日月 不可共存

唤醒停机期间的任务

anacron 命令可以实现 在指定时间该执行却没有执行的任务(意外断电而无法执行的任务)

anacron命令也是每个小时被crond执行一次,然后ancron 再去检测相关的 任务有没有被执行,如果 有超过期限的工作,就执行该 安排任务,执行完毕或无需执行任何任务时,anacron就停止了

anacron 其实是一支程序并非一个服务!这支程序在 CentOS 当中已经进入 crontab 的排程喔!同时anacron 会每个小时被主动执行一次
image

进程任务处理

第16章

任务管理job control

后台执行

如果只有一个bash环境,又想要同时进行多个工作,可以将某些工作直接放到后台执行,就是在命令的后面加上一个&
image

这样在后台执行的命令就不怕被ctrl+C 打断了

# 在编辑test.txt 文件时,使用Ctrl+Z 将当前任务挂到后台
[root@AliComputer shLearn]# vim test.txt[1]+  Stopped                 vim test.txt
[root@AliComputer shLearn]# jobs -l
# 现实正在挂载在后台的程序
[1]+ 3654019 Stopped                 vim test.txt
[root@AliComputer shLearn]#

但是,这里要注意一点,& 的作用是将任务放到后台执行,表示放入这个终端的后台,如果 该终端退出了,那么该任务也就被强制终止了,如果要实现 退出终端,任务继续执行,就需要使用nohup 命令了,它可以实现让命令在 该用户脱机或注销系统后继续执行该命令

# 在终端 前台执行
nohup [指令与参数]# 在终端 后台执行
nohup [指令与参数] &

除此之外,我们还可以将当前的工作暂停:比如当前正在使用vim编辑文件,如果要使用shell, 可以使用ctrl+Z实现暂时换出vim,回到shell环境。

如果要查看有多少个工作在后台,可以通过如下命令实现:

jobs [-lrs]-l  列出job number 与指令串之外,同时列出PID的号码
-r  仅列出正在背景运行的任务
-s  仅列出正在背景中暂停的工作

在查找到在后台的工作后,就可以通过如下的命令实现将 后台的工作放到前台继续处理:

fg %jobNumber%jobnumber  jobNumber 为工作号码,这里的% 必须要有

使用如下:

# 列出后台任务
[root@AliComputer shLearn]# jobs -l
[1]+ 3654019 Stopped                 vim test.txt
# 回到该任务,继续执行 1
[root@AliComputer shLearn]# fg %1
vim test.txt[root@AliComputer shLearn]# jobs -l
[root@AliComputer shLearn]#

下面考考虑该如何管理后台的工作:kill

kill -signal %jobnumber-l  列出目前kill可以使用的信号有哪些
signal  表示后面那个任务的 操作指示(在Linux开发 的信号中有详细讲解)-1  重新读取一次参数的配置文件,类似reload-2  由键盘输入 ctrl-C同样的动作-9  立刻强制删除一个工作-15  以正常的进程方式终止一个工作,与-9不一样

使用如下:
image

-9 是用在 强制删除一个不正常的工作时使用的,-15 是用在以正常步骤结束一个工作(kill 命令的默认值也是15)

进程管理

这里主要讲解 观察进程、管理基础相关的命令,并不涉及相关操作系统 API 等原理和操作使用。

ps :获取当前进程运行情况(这里仅列举常用的命令)

# 获取系统所有的进程参数
ps aux
# 观察所有系统数据
ps -lA
# 进查看自己的bash 相关进程
ps -l
# 查看进程树状态
ps axjf-A  所有的process 均显示出来,与-e 效果相似
-a  不予terminal有关的进程
-u  有效使用者的进程
x   通常与a这个参数一起使用,可以列出完整信息
下面的选项是限制输出格式的
l  较长,较详细的列出PID信息
j  工作格式 jobs format
-f  更加完整的输出

image

列出的主要字段如下:

  • F :进程标志(process flags), 表明 该进程的总结权限
    • 4 :表示该进程的权限为root
    • 1 :表示该子进程仅进行 复制fork 却没有执行
  • S :表示进程状态
    • R : running,该进程在运行中
    • S : Sleep,该进程在睡眠中,可以被唤醒
    • D : 不可被唤醒的睡眠状态,一般是在等待 I/O 的状态
    • T : 停止状态,可能是在工作控制或 除错 的状态
    • Z : 僵尸进程,进程已经终止,但是无法被移除置内存外
  • UID/PID/PPID : 该进程的所有者/进程PID号码/进程父进程PID号码
  • C : CPU使用率
  • PRI/NI : Priority/NicePriority/NicePriority/Nice的缩写,表示此进程被CPU所执行的优先级,数值越小表示该进程越快被CPU执行
  • ADDR/SZ/WCHAN : 与内存有关,ADDR表示该进程在内存的哪个部分,running 的进程就显示-, /SZ 表示此进程使用的内存,/WCHAN 表示该进程使用功能在运行中,若在运行中,使用- 表示
  • TTY: 登入者的中断位置,若为 远程登录 则使用动态终端接口 pts/n
  • TIME : 调用CPU时间,即此进程实际花费的 CPU运行时间
  • CMD : command的缩写,创建此进程的指令

使用ps aux 展示的字段与上面的命令稍有不同,但区别不大:
image

上面的ps命令是静态观察进程执行情况,下面的top 就是动态的观察,可持续侦测进程的运行状况

top [-d 数字] | top [-bnp]-d  后面可以接秒数,表示top命令更新的频率
-b  以批次的方式执行top,通常搭配数据重定向将结果输出到文件中
-n  与-b搭配,表示需要进行几次top的结果输出
-p  指定某个PID进行观察监测
在top执行过程中,可以使用如下的 按键指令? 显示在top中 可用的按键指令P  以CPU 使用资源排序M  以内存使用资源排序N  以PID排序T  由该程序使用的CPU时间累积值排序k  给于某个PID一个信号r  给予某个PID一个新的nice值q  离开top程序

image

其中第一行显示的信息如下:
image

第二行(Tasks…)表示:目前这个进程的总量与个别进程 处于什么状态

第三行(%Cpus…)表示:显示CPU的整体负载,每个项目可使用? 来查阅,特别注意wa项目,表示 I/O wait,一眼系统变慢就是由于 I/O 产生的问题比较大

第四行与第五行表示:目前的物理内存与虚拟内存的使用情况,swap要尽可能的小,如果swap很大,就表示系统的物理内存不足

第六行:当前在 top 程序中 输入指令时,限制转态的地方

下面就是 每个进程的详细信息了:
image

top 预设使用CPU使用率排序

pstree 可以表示进程之间的相关性

pstree [-A|U] [-up]-A  各进程树之间的连接以ASCII字符连接,最常用
-U  各进程树之间的连接以 万国码 连接,但是在某些终端下可能会有错误
-P  列出每个process的PID
-u  同时列出每个process的所属账号关系

进程管理最常用的就是使用信号实现,常用的信号如下:kill -signal PID
image

killall指令可以实现发出SIGHUP 信号,终止整个服务,不仅仅是终止一个进程那么简单了

killall [-iIe] [command name]-i  交互式操作
-e  exact,表示后面接的 command name要一致,但整个完整的指令不能超过15个字符
-l  指令名称,忽略大小写

进程的执行顺序

CPU 安排进程的执行是有一定的规则的,Linux赋予每个进程一个 优先执行序(priority,PRI),这个PRI值越低,表示优先级越高,这个值由Linux核心动态调整,用户无法直接调整,但是如果想要 执行进程的执行顺序,可以通过 Nice(Ni) 值进行调整, 有PRI(new)=PRI(old)+nicePRI(new)=PRI(old)+nicePRI(new)=PRI(old)+nice , 虽然 nice值可以影响 PRI,但是最终的 PRI仍然要经过系统分析后决定,而且 为了方便调整 Nice值是有正负的,当nice值为负时,就表示要降低该进程的 PRI值,优先处理该进程,有如下注意点:
image

一般的调整方式如下:

  • 一开始执行程序就立即给予一个特定的nice值:nice

    nice [-n 数字] command-n  后面接一个数字,数字范围在 -20~19
    

    一般在执行有些不重要的进程时,就可以调大nice值,比如备份系统资源这样的工作

  • 调整某个已经存在的 PID 的nice值:renice

    renice [number] PID PID  某个进程的ID(从 ps命令或其他进程观察程序中获取)
    

系统资源查看

free : 查看内存使用情况

free [-b|-k|-m|-g|-h] [-t] [-s N -c N]-b  直接输出free时,显示的单位是 Kbytes,可使用 b,M,KB,G来显示,也可以让系统指定单位(-h)
-t  在输出的最终结果,显示物理内存与swap的总量
-s  可以让系统每几秒输出一次
-c  与-s异瞳处理,让free列出几次的意思

使用如下:
image

一般Swap最好不要被使用,最好不要超过2020%20以上,超过了则说明物理内存不足了

uname : 查看系统与核心相关的信息

uname [-asrmpi]-a  所有系统相关的信息,包括低下的数据都会被列出
-s  系统核心名称
-r  核心版本
-m  本系统的硬件名称
-p  CPU类型,与-m类型
-i  硬件平台

使用如下:
image

uptime : 观察系统启动时间与工作负载,就是top 命令最上面的哪一行
image

netstat : 追踪网络或socket文件:

netstat -[atunlp]-a  将目前系统上面所以的联机、监听、socket数据都列出
-t  列出tcp网络封包的数据
-u  列出udp网络封包的数据
-n  不以服务的服务名称,以 端口号(port number) 来显示
-l  列出目前正在网络监听(listen)的服务
-p  列出该网络的服务进程PID

当前的udp服务如下:
image

各个字段的含义如下:
image

当前主机启动的服务:
image

dmesg : 分析核心产生的信息,比如系统开机时,系统会检测 系统的硬件,检测到的信息就在这里
image

vmstat : 检测系统资源变化

[root@study ~]# vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等信息
[root@study ~]# vmstat [-fs] <==内存相关
[root@study ~]# vmstat [-S 单位] <==设定显示数据的单位
[root@study ~]# vmstat [-d] <==与磁盘有关
[root@study ~]# vmstat [-p 分区槽] <==与磁盘有关
选项与参数:
-a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;
-f : 开机到目前为止,系统复制 (fork) 的进程数;
-s : 将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;
-S :后面可以接单位, 让显示的数据有单位。例如 K/M 取代 bytes 的容量;
-d :列出磁盘的读写总量统计表
-p :后面列出分区槽,可显示该分区槽的读写总量统计表

使用如下:
image

各个字段的含义如下:
image

查看系统所有磁盘的读写状态:
image

一般如果 I/O 部分特别忙碌,系统就会变的非常慢

特殊文件与进程

进程都是在内存当中!而内存当中的数据又都是写入到 /proc/* 这个目录下的,基本上,目前主机上面的各个进程的 PID 都是以目录的型态存在于 /proc 当中。 举例来说,我们开机所执行的第一支程序 systemd 他的 PID 是 1 , 这个 PID 的所有相关信息都写入在 /proc/1/*, 针对整个 Linux系统的相关参数:
image

fuser : 有文件或文件系统找出正在使用该文件的进程

fuser [-umv] [-k [i] [-signal] ] file/dir-u  处理进程的PID之外,同时列出该进程的拥有者
-m  后面接文件名,该文件名会主动提到该文件的最顶层,对 umount不成功很有效
-v  列出每个文件与进程和指令的完整相关性
-k  找出使用该文件/目录的PID,并试图使用 SIGKILL 终止该进程
-i  必须与-k 配合使用,在删除PID之前会先询问使用者
-signal  指定信号量,预设为 SIGKILL(9)

使用如下:
image

lsof : 列出被进程所开启的文件名

lsof [-aUu] [+d]-a  多项数据需要 同时成立 才可以显示出结果
-U  仅列出 socket文件类型
-u  接username,列出该使用者相关进程所开启的文件
+d  后面接目录,找出某个目录下已经被开启的文件# 列出root用户的所有进程开启的socket文件,-a 选项就是用于连接多个不同的需求使用的
lsof -u root -a -U# 列出root的bash程序所开启的文件
lsof -u root | grep bash

pidof: 找出某个正在执行的程序的PID

pidof [-sx] program_name-s  列出一个PID而不列出所有的PID
-x  同时列出该 程序 可能的 PPID 那个进程的PID# 列出 systememd 以及 resylogd 这两个程序的PID
pidof systemd rsyslogd

image

最后

一起提高,慢慢变强

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...