《前端运维》一、Linux基础–10定时任务「建议收藏」

一、进程管理进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体

大家好,又见面了,我是你们的朋友全栈君。

一、进程管理

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。以上这段话来自百度百科

简单来说哈,进程就是运行一段代码的实体。在linux中,我们可以通过命令来查看系统中所有的进程、判断服务器的状态、杀死进程等等。下面我们来看一下相关的命令都有哪些。

1、ps

该命令用来显示当前进程的状态,类似于Windows的任务管理器。它的选项非常多,这里仅简单说下常用的选项:

  • -A,显示所有进程
  • -w,显示加宽,可以显示更多的资讯
  • -au,显示较详细的资讯
  • -aux,显示所有包含其他使用者的行程

然后呢,我们来看下-au(x)命令下显示信息字段的含义:

数据 含义
USER 该进程是由哪个用户创建的
PID 进程的ID号
%CPU 该进程占用CPU资源的百分比,占用越高说明越消耗系统资源
%MEM 该进程占用物理内存的百分比,占用越高说明越消耗系统资源
VSZ 该进程占用虚拟内存的百分比,单位是KB
RSS 该进程占用实际物理内存大小,单位是KB
TTY 该进程在哪个终端中运行。tty1~tty7表示本地控制终端,tty1~tty6是字符终端,tty7是图形终端。pts/0~255代表虚拟终端,?表示此终端是系统启动的
STAT 进程状态
START 该进程的启动时间
TIME 该进程占用CPU的运算时间,数值越高说明越消耗系统资源
COMMAND 产生此进程的命令名

其中STAT进程状态对应的字段含义是:

  • D: 无法中断的休眠状态 (通常 IO 的进程)
  • R: 正在执行中
  • S: 静止状态
  • T: 暂停执行
  • Z: 不存在但暂时无法消除
  • W: 没有足够的记忆体分页可分配
  • <: 高优先序的行程
  • N: 低优先序的行程
  • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)

2、pstree

 将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程,常用选项如下:

  1. -u,显示用户名称
  2. -p,显示进程pid

3、top

该命令用于实时显示process的动态。常用选项如下:

  • -d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • -q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • -c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
  • -S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • -s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • -i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • -n : 更新的次数,完成后将会退出 top
  • -b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

直接执行top命令显示如下信息:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 解释下信息的内容:

第一行是任务队列信息。

内容 说明
12:12:12 系统的当前时间
up 1 day 5:33 系统的运行时间,本机已经运行了1天5小时33分
2 users 当前登录了二个客户端
load average 0 0 0 系统在之前1分钟、5分钟、15分钟的平均负载。一般认为小于1小时负载较小,大于1超过负载

第二行是行为进程信息。

内容 说明
Tasks: 100 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程。如果不是0的话要进行检查

第三行是行为CPU信息。

%Cpu(s): 0.1us 用户模式占用的CPU百分比
0.1sy 系统模式占用的CPU百分比
0.0ni 改变过优先级的用户进程 占用的CPU百分比
99.7id 空闲CPU的CPU百分比
0.1wa 等待输入/输出的进程的占用CPU百分比
0.1hi 硬中断请求服务占用的CPU百分比
0.1si 软中断请求服务占用的CPU百分比
0.0st st(Steal time)虚拟时间百分比,就是当有

第四行是行为物理内存信息。

内容 说明
Mem: 1030720k total 物理内存的问题,单位是KB
551860k used 已经使用的物理内存数量
478860k free 空闲的物理内存数量,虚拟机分配了1024M内存,使用了538M,空闲467M
43180k buffers 作为缓冲的内存数量,可以存放需要写入硬盘的数据,用来加速数据的写入

第五行为交换分区信息。

内容 说明
Swap: 2047992k total 总计的交换分区(虚拟内存)大小
536k used 已经使用的交换分区大小
2047456k free 空闲的交换分区大小
368164k cached 把需要经常读取的数据从硬盘读到内存中,加速了数据的读取

另外我们需要学习的就是一些交互式命令:

选项 含义
?或h 显示交互模式的帮助
P 按CPU使用率排序,默认就是此选项
M 以内存的使用率排序
N 以PID排序
q 退出top

4、kill

该命令用于删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。常用选项如下:

  • -l <信息编号>  若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
  • -s <信息名称或编号>  指定要送出的信息。
  • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。

常用的信息编号如下:

  • 1 (HUP):重新加载进程。
  • 9 (KILL):杀死一个进程。
  • 15 (TERM):正常停止一个进程。

下面我们来看一个小栗子:

我们创建一个sh文件,并将它存储在/demo下,文件的内容如下:

#!/bin/bash

i=0
while [ $i -le 1000 ]
 do
   echo $(date)
   sleep 1s
 done

很简单,就是循环执行1000次,打印当前日期。然后我们重新开个窗口来执行这段脚本。然后他就一直打印了:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 我们来杀死他,杀死他之前需要知道他的信息编号,我们来看下:

第一种方法是这样执行脚本:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 它会打印信息编号后再执行。于是我们就可以:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 然后,另一个窗口运行的代码就停止了。

另一种查询的方法是这样的:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 也可以查到信息编号。好了,小栗子就到这里,我们继续往下学习。

二、系统资源查看

1、vmstat

监控系统资源使用状态,vmstat [刷新延时] [刷新次数]。比如vmstat 1 3。就是每秒刷新一次,刷新三次后停止。

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 其中字段的含义如下:

1)procs:进程信息字段

分类 参数 含义
procs r 等待运行的进程数,数量越大,系统就越繁忙
procs b 不可被唤醒的进程数量,数量越大,系统越繁忙

2)memory:内存信息字段

分类 参数 含义
memory swpd 使用的Swap空间的大小,单位KB
memory free 空闲的内存容量,单位KB
memory buff 缓冲的内存容量,单位KB
memory cache 缓存的内存容量,单位KB

3)swap:交换分区字段,如果说si和so数越大说明数据经常要在磁盘和内存之间数据交换,系统性能就会越差

分类 参数 含义
swap si(in) 从磁盘中交换到内存中的数据的数量,单位KB
swap so(out) 从内存中交换到硬盘中的数据的数量,单位KB

4)io:磁盘读写,bi和bo数越大,说明磁盘的I/O越繁忙。

分类 参数 含义
io bi(in) 从块设备读入数据的问题,单位是块
io bo(out) 写到块设备的数据的总量,单位是块

5)system:系统信息字段,in和cs数越大说明系统与接口设备的通信越频繁。

分类 参数 含义
system in(interrupt) 每秒被中断的进程次数
system cs(switch) 每秒钟进行的事件切换次数

6)CPU:CPU信息字段

分类 参数 含义
CPU us(user) 非内核进程消耗CPU运算时间的百分比
CPU sy(system) 内核进程消耗CPU运算时间的百分比
CPU id(idea) 空闲CPU的百分比
CPU wa(wait) 等待I/O所消耗的CPU百分比
CPU st(steal) 被虚拟机偷走的CPU百分比

2、free

该命令用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。常用选项如下:

  • -b, 以字节为单位
  • -k ,以KB字节为单位
  • -m ,以MB字节为单位
  • -g ,以GB字节为单位
  • -h ,以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:B = bytes,K = kilos,M = megas,G = gigas,T = teras
  • -o ,不显示缓冲区调节列。
  • -s <间隔秒数> ,持续观察内存使用状况。
  • -t ,内存总和列。
  • -V ,显示版本信息。

比如我们试一下free -m命令,显示如下:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

 3、uname

用来查看内核相关信息,常用选项如下:

  • -a或–all  显示全部的信息。
  • -m或–machine  显示电脑类型。
  • -n或–nodename  显示在网络上的主机名称。
  • -r或–release  显示操作系统的发行编号。
  • -s或–sysname  显示操作系统名称。
  • -v  显示操作系统的版本。
  • –help  显示帮助。
  • –version  显示版本信息。

4、file 

该指令用于辨识文件类型。常用选项如下:

  • -b  列出辨识结果时,不显示文件名称。
  • -c  详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
  • -L  直接显示符号连接所指向的文件的类别。
  • -m<魔法数字文件>  指定魔法数字文件。
  • -v  显示版本信息。
  • -z  尝试去解读压缩文件的内容。
  • [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

通过file命令,可以查看/bin/ls来查看操作系统位数。

5、其他

可以通过lsb_release -a命令查看发行版本。可以通过lsb_release -v命令查看发行版本。

三、定时任务

1、crontab

该命令可以用来定期执行程序。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。而 linux 任务调度的工作主要分为以下两类:

  • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

可以通过下面的命令重启cron:

systemctl restart crond.service

然后可以通过ps -ef | grep crond来查看是否启动了crond:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 

crontab命令常用的选项如下:

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

说明:

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

crontab的语法如下:

crontab [ -u user ] file
# 或者
crontab [ -u user ] { -l | -r | -e }

 循环任务还有时间格式,如下:

f1 f2 f3 f4 f5 program
  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

额外的,表示时间还有些特殊符号,我们要注意一下:

符号 含义 例子
* 代表任意时间 比如第一个星就代表一个小时中每分钟都执行一次
, 代表不连续的时间 比如”1,2,3 “,就代表每小时的1分、2分、3分执行命令
代表连续的时间范围 比如 ” 1-5 * ** “,代表每小时的第1分到第5分执行命令
*/n 代表每隔多久执行一次 比如 “/10 ” 就代表每隔10分钟就执行一次命令
0 0 1,10 * 1 每月1号和10号,每周1的0点0分都会执行

仅仅罗列语法有点模糊,我们来看个例子吧:

首先,我们通过定时任务的编辑模式命令,编辑一个定时任务:

crontab -e

然后再vi的指令模式下点击键盘的i,这个就不多说了,在vi的那一章有详细的讲,然后我们编辑一个定时任务:

* * * * * echo `date` >> /root/date.log

什么意思呢,就是每分钟打印日期并输入到date.log文件中。要注意,定时任务中的时间最小单位是分钟,最大单位是天,另外,无论是写命令还是脚本都需要使用绝对路径。额外要说明的是:

  • crontab -e是用户执行的命令,不同的用户身份可以执行自己的定时任务
  • 如果需要系统执行定时任务,可以编辑/etc/crontab文件
  • /etc/crontab可以指定shell、路径、邮件发送和家目录

我们继续上面的例子:

写完定时任务后,我们保存并推出退出。然后就会出现如下的提示:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 即,安装了新的定时任务。另外,我们也可以通过crontab -l命令查看当前的定时任务:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 然后呢,我们看看date.log文件:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 发现任务确实是在跑的。就让它先跑着吧…。

四、定时任务实战

还记得之前我们安装了nginx、mysql等工具,下面我们通过这章的学习内容,来监控下各工具的运行状态。

1、监控nginx状态

监控的代码如下:

#!/bin/bash
#设置本地变量
#变量nginx的结果是查询nginx的进程,不包含grep自身
nginx=`ps -ef |grep /user/sbin/nginx|grep -v grep|wc -l`
# 然后下面的意思大家都懂了吧,不懂就回头复习一遍
 if [ $nginx -gt 2 ];then
    echo "your nginx is running"
    exit 0
 else
    echo "your nginx is ready to  rerunning"
    /bin/systemctl start nginx.service
    exit 1
fi

然后我们跑一下这个命令试一下,还是之前demo的位置,这个位置其实无所谓,就是你放置脚本的位置就对了:

《前端运维》一、Linux基础--10定时任务「建议收藏」

 

 然后,我们可以:

curl http://localhost

就可以看到了结果了。欸?你这是手动的啊,也没定时啊。没错。但是,我们可以把命令按照前面的例子加进去就可以了,这里不再演示,大家要自己动手了哦。

2、监控mysql状态

这回大家都知道怎么用了吧,这回仅展示下定时任务的脚本,别的就不说啦:

#!/bin/bash
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -gt 0 ]
then
 echo "mysqld is running."
else
 echo "mysqld is stoped."
fi

3、mysql备份

#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=127.0.0.1
DB=test
USER=root
PASS=abcd1#EFG
MAIL="83687401@qq.com"
BACKUP_DIR=/data/db_backup
if [ ! -d "$BACKUP_DIR" ];then
 mkdir -p $BACKUP_DIR
fi
SQL_FILE=${DB}_FULL_$DATE.sql
BAK_FILE=${DB}_FULL_$DATE.zip
cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS -B $DB > $SQL_FILE; then
  zip $BAK_FILE $SQL_FILE && rm -rf $SQL_FILE
  if [ ! -s $BAK_FILE ]; then
    echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
  fi
else
  echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
fi
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;

到此这篇文章就结束了哦。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/124358.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 《java核心技术卷I》[通俗易懂]

    《java核心技术卷I》[通俗易懂]《java核心技术卷I》java老师讲课的内容PPT代码基本是来自于这里,感觉还不错,里面的代码也是循序渐进的。这本书本身也是老师开始讲课时推荐的或者说参考的书的第一本。

  • dataTable自定义搜索框位置

    dataTable自定义搜索框位置其实不能叫自定义位置dataTable的搜索框请参阅dataTabledom:http://www.datatables.club/reference/option/dom.html我的需求是将dataTable默认位置的搜索框移动到我的form表单中的搜索位置如图:因为自己不会写前端却要写前端幸得群里大神指点在页面写样式覆盖原来的样式在这里记录一下解决办法…

  • Android toArray

    Android toArrayArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:1.list.toArray();2.list.toArray(T[]a);对于第一个重载方法,是将list直接转为Object[]数组;第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。不明真像的同学喜欢用第

  • 查看vue版本的命令–npm list vue

    查看vue版本的命令–npm list vue(base)bogon:~ivyone$npmlistvue└──vue@3.0.0不是—v或vesion

  • mycat实现读写分离_mybatis读写分离实现

    mycat实现读写分离_mybatis读写分离实现环境:四台主机,两台mysql做主从:master和slave一台mysql做测试,ip:10.30.162.142一台mycat做读写分离,ip:192.168.122.230客户端访问mycat端的虚拟数据库mycat端虚拟数据库设定如下:user:adminpassword:redhatmycat通过一个真实数据库授过权的用户来对数据库端进行数据的操作,在这个实验中这个用户为m…

    2022年10月13日
  • 牛顿法和牛顿迭代法一样吗_牛顿迭代法流程图

    牛顿法和牛顿迭代法一样吗_牛顿迭代法流程图牛顿法,大致的思想是用泰勒公式的前几项来代替原来的函数,然后对函数进行求解和优化。"牛顿法"和"应用于最优化的牛顿法"稍微有些差别。牛顿法牛顿法用来

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号