热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《前端运维》一、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命令显示如下信息:

 

 

 解释下信息的内容:

第一行是任务队列信息。



























内容说明
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.0stst(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次,打印当前日期。然后我们重新开个窗口来执行这段脚本。然后他就一直打印了:

 

 

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

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

 

 

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

 

 

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

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

 

 

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


二、系统资源查看

1、vmstat

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

 

 

 其中字段的含义如下:

1)procs:进程信息字段






















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

2)memory:内存信息字段
































分类参数含义
memoryswpd使用的Swap空间的大小,单位KB
memoryfree空闲的内存容量,单位KB
memorybuff缓冲的内存容量,单位KB
memorycache缓存的内存容量,单位KB

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






















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

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






















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

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






















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

6)CPU:CPU信息字段





































分类参数含义
CPUus(user)非内核进程消耗CPU运算时间的百分比
CPUsy(system)内核进程消耗CPU运算时间的百分比
CPUid(idea)空闲CPU的百分比
CPUwa(wait)等待I/O所消耗的CPU百分比
CPUst(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命令,显示如下:

 

 

 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:

 

 

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、路径、邮件发送和家目录

我们继续上面的例子:

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

 

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

 

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

 

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


四、定时任务实战

还记得之前我们安装了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的位置,这个位置其实无所谓,就是你放置脚本的位置就对了:

 

 然后,我们可以:

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 {} \;

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

 

站在巨人的肩膀上,希望我可以看的更远。



推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 【影评】大内密探灵灵狗
    本文是对王晶执导的电影《大内密探灵灵狗》进行的影评。文章称赞了王晶的才华和导演经验,认为演员阵容强大,笑料不少,发明新奇又好笑。然而,编剧的表现被认为是本片的最大失败,宣传言过其实,笑点不多。总体来说,本片是一部典型的王式喜剧,可看性较高,但没有突破。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
author-avatar
mobiledu2502892183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有