转发请注脚: 

  转发请注脚: 

linux服务器质量(网卡流量、CPU、内存、磁盘使用率)监控,linux流量

  广义的网站的督查涵盖全体的非业务行为的多寡搜集与管理,包罗数据分析师和成品设计师运用的网站用户作为日志、业务运营数据,以及供运行工程师和开发工程师使用的性能总计数据等。

   
 本文重如果通过shell脚本来收集服务器品质目标,如系统load、内存占用、磁盘IO、CPU占用,并将其写入三个文件中,及时判断应用景况,早为之所。

  完毕步骤如下:

  第一步:编写shell脚本,如下:

    vim check.sh,添加底下脚本之后保存

  1 #!/bin/bash
  2 #这个脚本使用来统计CPU、磁盘、内存使用率、带宽的
  3 #初始化一些下面用到的变量
  4 total=0
  5 system=0
  6 user=0
  7 i=0
  8 
  9 time=`date "+%Y-%m-%d %k:%M"`
 10 day=`date "+%Y-%m-%d"`
 11 minute=`date "+%k:%M"`
 12 echo  "*************************************************************************" >> 1234.txt
 13 echo "统计开始时间:$day $minute" >> 1234.txt
 14 
 15 #带宽使用情况
 16 echo "#带宽的使用情况:#" >>1234.txt
 17 #循环五次,避免看到的是偶然的数据
 18 while (( $i<5 ))
 19 do
 20 #原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式获取网卡的信息为空,已经注释掉
 21 #rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 22 #tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 23 rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 24 tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 25 #休眠2s
 26 sleep 2
 27 #用sed先获取第7列,再用awk获取第2列,再cut切割,从第7个到最后,即只切割网卡流量数字部分
 28 #rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 29 #tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 30 rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 31 tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 32 #注意下面截取的相差2秒的两个时刻的累计和发送的bytes(即累计传送和接受的位)
 33 rx_result=$[(rx_after-rx_before)/1024/1024/2*8]
 34 tx_result=$[(tx_after-tx_before)/1024/1024/2*8]
 35 echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>1234.txt
 36 let "i++"
 37 done
 38 #注意下面grep后面的$time变量要用双引号括起来
 39 rx_result=$(cat 1234.txt|grep "$time"|awk '{In+=$4}END{print In}')
 40 tx_result=$(cat 1234.txt|grep "$time"|awk '{Out+=$7}END{print Out}')
 41 In_Speed=$(echo "scale=2;$rx_result/5"|bc)
 42 Out_Speed=$(echo "scale=2;$tx_result/5"|bc)
 43 #echo "#带宽的5次的平均值是:#" >>1234.txt
 44 echo  "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>1234.txt
 45 
 46 
 47 #CPU使用情况
 48 #使用vmstat 1 5命令统计5秒内的使用情况,再计算每秒使用情况
 49 which sar > /dev/null 2>&1
 50 if [ $? -ne 0 ]
 51 then
 52   total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'`
 53   average=$(echo "scale=2;$total/5"|bc)
 54 fi
 55 echo "#CPU使用率:#" >>1234.txt
 56 echo "Total CPU  is already use: $average%" >>123.txt
 57 
 58 
 59 #磁盘使用情况(注意:需要用sed先进行格式化才能进行累加处理)
 60 disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}')
 61 disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}')
 62 disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc)
 63 disk_percent1=$(echo $disk_all | cut -c 2-3)
 64 disk_percent2=$(echo $disk_all | cut -c 4-5)
 65 disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '`
 66 echo "#磁盘利用率#" >>123.txt
 67 echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt
 68 #echo -e "\t\t.." 表示换行
 69 echo -e "\t\t#磁盘存在目录使用率超过85%报警#" >>123.txt
 70 echo -e "\t\tover used: $disk_warning" >>123.txt
 71 
 72 
 73 #内存使用情况
 74 #获得系统总内存
 75 memery_all=$(free -m | awk 'NR==2' | awk '{print $2}')
 76 #获得占用内存(操作系统 角度)
 77 system _memery_used =$(free -m | awk 'NR==2' | awk '{print $3}')
 78 #获得buffer、cache占用内存,当内存不够时会及时回收,所以这两部分可用于可用内存的计算
 79 buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}')
 80 cache_used=$(free -m | awk 'NR==2' | awk '{print $7}')
 81 #获得被使用内存,所以这部分可用于可用内存的计算,注意计算方法
 82 actual_used_all =$[memery_all-(free+buffer_used+cache_used)]
 83 #获得实际占用的内存
 84 actual_used_all=`expr $memery_all - $free + $buffer_used + $cache_used `
 85 echo "$used_all" >> 123.txt
 86 memery_percent=$(echo "scale=4;$system _memery_used / $memery_all" | bc)
 87 memery_percent2=$(echo "scale=4; $actual_used_all / $memery_all" | bc)
 88 percent_part1=$(echo $memery_percent | cut -c 2-3)
 89 percent_part2=$(echo $memery_percent | cut -c 4-5)
 90 percent_part11=$(echo $memery_percent2 | cut -c 2-3)
 91 percent_part22=$(echo $memery_percent2 | cut -c 4-5)
 92 echo "#内存使用率#" >> 123.txt
 93 #获得占用内存(操作系统角度)
 94 echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt
 95 #获得实际内存占用率
 96 echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt
 97 echo "buffer is already used : $buffer_used M" >>123.txt
 98 echo "cache is already used : $cache_used M" >>123.txt
 99 
100 
101 echo  "结束本次统计:$day $minute" >> 123.txt
102 echo  "*************************************************************************" >> 123.txt
103 echo -e "\n\n\n\n" >> 123.txt

 第二步:创建shell脚本中用到两个文件123.txt和1234.txt
    touch 123.txt
 第三步:给check.sh和123.txt授予所有权限
  chmod 777 check.sh
  chmod 777 123.txt

澳门金沙国际 1

  第四步:执行check.sh脚本

    ./check.sh

澳门金沙国际 2

  第伍步:查看执行写入文件的图景

澳门金沙国际 3

并发那新闻表名脚本成功运维实时总括情形。

 

只要想行使定时职分,可采纳crontab举行设置,请参见那篇小说

crontab的二种配备方式  

广义的网站的督察涵盖全数的非业务行为的多寡收集与管理,蕴涵数…

定时任务 Crontab命令 详解整理

澳门金沙国际 4

前言

crontab是Unix和Linux用于安装周期性被实践的通令,是网络很常用的技艺,很多义务都会设置在crontab循环执行,假设不行使crontab,那么职责就是常驻程序,那对你的次序须求比较高,3个渴求您的次第是24X7时辰不宕机,二个是
须求你的调度程序比较保障,实际工作中,十分之九的先后都没有需要花这么多时光和生机去消除地点的八个难题的,只需求写好团结的工作逻辑,通过crond那么些工业级程序去调度就行了,crond的可倚重性,健壮性,大家应该是必然的。

crontab简易入门

尽管作者要设置一个职分,每秒钟就要做2个数量同步,这些合伙脚本的路径是/home/blue/do/rsyncfile.sh,那么自身可以在如此配置,使用blue用户,在顶峰输入

1``crontab``-e

2``# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。

3``#分 时 日 月 周 |<==============任务的完整命令行

4````* * * * * /home/blue/``do``/rsyncfile.sh

私自认同情形下,任何使用者只要不被列入/etc/cron.deny当中,那么她就足以一贯下达『crontab
-e』去编辑自身的例行性命令了!整个进度就像同下边提到的,会进来 vi
的编纂画面, 然后以贰个办事一行来编排,编辑完毕之后输入『:wq』储存后离开
vi 就可以了!

若是大家须求修改为每6分钟运维数据同步的台本,那么同样运用crontab
-e进入编辑:

1``*/5 * * * * /home/blue/``do``/rsyncfile.sh

只要服务器出了难点,有一天的数额尚未同步,于是我们就要求补多少了,若是那一个补数据的脚本是/home/blue/do
/rsyncfile_day.sh,可是白天是高峰期,中午用户不多,是低峰期,大家补数据会占用多量带宽,尤其是大白天,会影响平常工作,所以一般我们可以让补多少职务在凌晨2点起来跑,那么相同选取crontab -e进入编辑:

1``0 2 1 4 * /home/blue/``do``/rsyncfile_day.sh

这么,在四月1号凌晨2点0分就会开首起步大家的补数据的台本了。

协办数据,在网络公司是再平凡可是的义务了,那里大家可以观察crontab的魔力所在了,只须求写最简便的业务逻辑,把调度交给crond做,就做到了两个可相信性很高的一项义务了,假设要和谐去额外写这种调度程序,不明白要花多少精力才能到位可信稳定。

crontab的语法

1``crontab``[-u username] [-l|-e|-r]

2``选项与参数:

3``-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除``crontab``工作排程;

4``-e :编辑``crontab``的工作内容

5``-l :查阅``crontab``的工作内容

6``-r :移除所有的``crontab``的工作内容,若仅要移除一项,请用 -e 去编辑

查询使用者近来的 crontab 内容:

1``crontab``-l

2``*/5 * * * * /home/blue/``do``/rsyncfile.sh

3``0 2 1 4 * /home/blue/``do``/rsyncfile_day.sh

清空使用者方今的 crontab:

1``crontab``-r

2``crontab``-l

3``no``crontab``for``blue

假若您想删除当前用户的某七个crontab职分,那么使用crontab
-e进入编辑器,再删除相应的职务。

crontab的限制

/etc/cron.allow:将得以使用 crontab
的帐号写入其中,若不在那一个文件内的使用者则不得利用 crontab;

/etc/cron.deny:将不得以行使 crontab
的帐号写入其中,若未记录到这么些文件当中的使用者,就足以选拔 crontab 。

以先行顺序来说,/etc/cron.allow比/etc/cron.deny要先行,
而判断方面,这五个公文只选用2个来限制而已,由此,提出您只要保留多少个即可,
免得影响自身在配备方面的判定!一般的话,系统默许是保留/etc/cron.deny,你能够将不想让她运行crontab 的要命使用者写入 /etc/cron.deny 当中,壹个帐号一行!

/etc/crontab配置文件讲解

『crontab -e』是对准使用者的 cron
来统筹的,如若是『系统的例行性职分』时,就要编辑/etc/crontab这一个文件。

那就是 crontab -e 那些 crontab 其实是 /usr/bin/crontab 这些运行档,但是/etc/crontab 不过一个『纯文字档』,必须用 root 的地位编辑一下以此文件。

首先大家要来看看crontab的文件内容

01``cat``/etc/``crontab

02

03``# /etc/crontab: system-wide crontab

04``` # Unlike any other crontab you don't have to run thecrontab’ “

05``# command to install the new version when you edit this file

06``# and files in /etc/cron.d. These files also have username fields,

07``# that none of the other crontabs do.

08

09``SHELL=/bin/sh

10``PATH=/usr/``local``/sbin:/usr/``local``/bin:/sbin:/bin:/usr/sbin:/usr/bin

11

12``# m h dom mon dow user command

13``17 * * * * root``cd``/ && run-parts --report /etc/``cron``.hourly

14``25 6 * * * root``test``-x /usr/sbin/anacron || (``cd``/ && run-parts --report /etc/``cron``.daily )

15``47 6 * * 7 root``test``-x /usr/sbin/anacron || (``cd``/ && run-parts --report /etc/``cron``.weekly )

16``52 6 1 * * root``test``-x /usr/sbin/anacron || (``cd``/ && run-parts --report /etc/``cron``.monthly )

本条文件与将刚刚大家下达 crontab -e
的情节大概全盘一模一样!只是有多少个地方不太雷同

1``PATH=....:

那里就是输入运维档的寻找路径!使用暗中认同的路线配置就曾经很充分了!

1``17 * * * * root``cd``/ && run-parts --report /etc/``cron``.hourly:

这么些 /etc/crontab
里面预配置义出四项工作职分,分别是每小时、每一日、周周及各样月各自开展四次的做事!
不过在三个栏位后边接的并不是命令,而是2个新的栏位,那就是『运行前边那串命令的身价』为什么!那与使用者的
crontab -e 差别。由於使用者自身的 crontab 并不须要指定地方,但
/etc/crontab
里面当然要指定地方啦!以上表的故事情节的话,系统默许的例行性工作是以 root
的身份来拓展的。

那就是说后边那串命令是怎么着吗?你可以应用『 which run-parts
』搜寻看看,其实这是二个 bash script 啦!如若你平素进去
/usr/bin/run-parts 去看望,
会发现那支命令会将后边接的『目录』内的享有文件捉出来运转!那也等于说『
借使你想让系统每刻钟主动帮您运行某些命令,将该命令写成
script,并将该公文放置到 /etc/cron.hourly/ 目录下即可』的意趣!

今天您领悟系统是哪些进展他暗许的一堆例行性工作排程了呢?假使您下达『 ll
/etc/cron.daily 』就能够看看一堆文件, 那多少个文件就是系统提供的 script
,而那堆 scripts 将会在每一日的黎明先生 6:25 开头运维!

假若你未来要作一个目录,让系统可以每 2
分钟去运作这么些目录下的享有可以运维的文件,你可以写下如下的这一行在
/etc/crontab 中:

1``*/2 * * * * root run-parts /etc/``cron``.min

本来罗, /etc/cron.min
这一个目录是急需存在的喔!那假设自个儿须求周转的是3个『程序』而已,
不必要接纳贰个目录呢?该怎么做?例如在侦测网络流量时,大家期待每4分钟侦测分析一遍,
能够这么写:

1``*/5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg

何以!创造例行性命令很简单吗!假使你是系统管理员而且你的干活又是系统保险方面的例行职务时,
直接修改 /etc/crontab 那一个文件即可喔!又便利,又方便管理呢!

crontab的原理

磁盘使用率,详解整理。当使用者利用 crontab
这几个命令来创设工作排程之后,该项工作就会被记录到/var/spool/cron/里面去了,而且是以帐号来作为判其他喔!举例来说,
blue 使用 crontab 后,
他的工作会被记录到/var/spool/cron/blue里头去!但请小心,不要拔取 vi
直接编辑该公文, 因为恐怕出于输入语法错误,会促成不或然运维 cron
喔!其它, cron
运维的每一项工作都会被记录到/var/log/cron那么些登录档中,所以罗,即使您的
Linux 不明白有否被植入木鸡时,也得以搜寻一下 /var/log/cron
那一个登录档呢!

crond服务的最低侦测限制是『分钟』,所以『 cron
会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数额内容
』,因而,只要你编辑完 /etc/crontab 这些文件,并且将他储存之后,那么
cron 的配备就活动的会来运作了!

备注:在 Linux 底下的 crontab 会自动的帮我们每分钟再度读取三次/etc/crontab 的例行工作事项,可是有些原因大概是其他的 Unix 系统中,由于
crontab 是读到内存当中的,所以在您改改完 /etc/crontab
之后,或许并不会应声运转, 这几个时候请重新启航 crond
这几个服务吗!『/etc/init.d/crond restart』 或『servicecrond restart』

crontab的格式讲解

每项工作 (每行) 的格式都以兼具七个栏位,那三个栏位的含义为:

代表意义分钟小时日期(天)月份周命令数字范围0-590-231-311-120-7啊就命令啊

相比有意思的是非凡『周』喔!周的数字为0或7时,都代表『周日』的情致!其余,
还有一对助手的字符,差不离有上边那几个:

特殊字符代表意义*(星号)代表任曾几何时刻都领受的趣味!举例来说,范例一内十二分日、月、周都是
* , 就代表著『不论何月、何日的礼拜几的 12:00
都运作后续命令』的趣味!,(逗号)

意味着分隔时段的情致。举例来说,假诺要下达的做事是 3:00 与 6:00
时,就会是:

0 3,6 * * * command

时光参数照旧有五栏,然而第三栏是 3,6 ,代表 3 与 6 都适用!

-(减号)

表示一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 18分都开展一项工作:

20 8-12 * * * command

密切观望第贰栏改成 8-12 喔!代表 8,9,10,11,12 都适用的意味!

/n(斜线)

可怜 n 代表数字,亦即是『每隔 n
单位距离』的意趣,例如每6秒钟进行一遍,则:

*/5 * * * * command

很简单吗!用 * 与 /5 来衬托,也得以写成 0-59/5 ,相同意思!

周与日月不行同时现有

另两个亟待小心的地方在於:『你可以分级以周或然是日月为单位作为循环,但您不得利用「几月几号且为星期几」的方式工作』。
那一个意思是说,你不得以那样编写2个工作排程:

1``30 12 11 9 5 root``echo``"just test"``<==这是错误的写法

自然你认为七月十一号且为周天才会开展那项工作,无奈的是,系统恐怕会咬定每一个周五作五回,或每年的
9 月 11
号分别举办,如此一来与您当时的安排就差别等了~所以罗,得要注意这几个地点!上述的写法是不对的!

CentOS下查看crontab执行历史记录

在crontab中添加了定时任务,但发现没有得到期望的结果,因此怀疑是crontab没有进行相应的职分,但怎么定位crontab是还是不是推行呢?

那就需求查阅crontab的履行历史记录,具体地点如下:

1``cd``/var/log

2``tail``-100``cron

在cron文件中即可查看已经操作过的连带定时任务。

参考资料:


① 、Crontab 格式说明

我们可以用crontab -e添加要执行的吩咐。
命令执行的结果,无论是专业输出照旧错误输出,都将以邮件形式发放用户。

添加的通令必须以如下格式:

* * * * * /command path

前三个字段可以取整数值,指定哪天初叶工作,第两个域是字符串,即命令字段,其中囊括了crontab调度执行的指令。
种种字段之间用spaces和tabs分割。

前多少个字段分别代表:

分钟:0-59
小时:1-23
日期:1-31
月份:1-12
星期:0-6(0表示周五)

还足以用部分特殊符号:

*: 表示任何时刻
,: 表示分割
-:表示多少个段,如第3端里: 1-5,就意味着1到5点
/n : 表示逐个n的单位履行五遍,如第3段里,*/1,
就代表每隔三个小时实施一回命令。也足以写成1-23/1.

一部分演示:

00 8,12,16 * * * /data/app/scripts/monitor/df.sh
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh
10 8,12,16 * * *
/data/app/scripts/monitor/check_ind_unusable.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

43 21 * * * 21:43 执行
15 05 * * * 05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每一周五的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行
42 4 1 * * 毎月1日的 4:42分 执行
0 21 * * 1-6 星期天到周三 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * * 每隔10分 执行
* 1 * * * 从1:0到1:59 每隔1分钟 执行
0 1 * * * 1:00 执行
0 */1 * * * 毎时0分 每隔1小时 执行
0 * * * * 毎时0分 每隔1小时 执行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * * 1日 和 15日的 5:30 执行

② 、& 后台执行命令

当在前台运营有些作业时,终端被该学业占据;而在后台运行作业时,它不会占有终端。可以运用&命令把作业放到后台执行。

如:

1``30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &

在后台运维作业时要警惕:须求用户交互的下令不要放在后台执行,因为这么您的机械就会在那边傻等。

唯独,作业在后台运营一样会将结果输出到显示屏上,干扰你的行事。若是放在后台运转的作业会暴发大量的出口,最好使用上边的章程把它的出口重定向到有个别文件中:

如:

1``command``>out.``file``2>&1 &

在那个例子中,2>&1表示拥有的正式输出和谬误输出都将被重定向到三个叫做out.file
的公文中。

三、2>&1 含义

先看三个例证:

1``0 2 * * * /u01/``test``.sh >/dev/null 2>&1 &

那句话的意思就是在后台执行那条命令,并将错误输出2重定向到专业输出1,然后将业内输出1百分百放手/dev/null
文件,也等于清空。

在此处有有多少个数字的意思:

0象征 键盘输入
1代表 标准输出
2意味 错误输出

我们也足以那样写:

0 2 * * * /u01/test.sh 1>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &

将tesh.sh 命令输出重定向到out.file,
即出口内容不打印到显示器上,而是输出到out.file文件中。

2>&1 是将错误输出重定向到正式输出。
然后将规范输入重定向到文件out.file。

&1
表示的是文本讲述1,表示业内输出,如若那里少了&就成了数字1,就意味重视定向到文件1。

& :后台执行

测试:

ls 2>1 : 不会报没有2文本的荒谬,但会输出1个空的文件1;
ls xxx 2>1: 没有xxx这几个文件的不当输出到了1中;
ls xxx 2>&1: 不会生成1这几个文件了,可是错误跑到正规输出了;
ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1:
因为重定向符号>暗许是1,那句就把错误输出和规范输出都传到out.txt
文件中。

④ 、2>&1写在背后的原故

格式:command > file 2>&1 == command 1> file 2>&1

率先是command > file将标准输出重定向到file中, 2>&1
是正经错误拷贝了正规输出,也等于同样被重定向到file中,最后结果就是正统输出和不当都被重定向到file中。

若果改成: command 2>&1 >file

2>&1 标准错误拷贝了规范输出的表现,但那时专业输出如故在终点。>file
后输出才被重定向到file,但业内错误照旧维持在终端。

拉开阅读:

Shell标准输出、标准错误 >/dev/null 2>&1

什么让Linux定时职务crond以秒为单位实施(如每隔3秒)


经验教训:

打算在服务器上 每日中午23:00
定时举行Python脚本,去备份MySql数据库,命令如下:

1``* 23 * * * python /``var``/www/html/crontab_python/back_db.py >/dev/null 2>&1

结果吧,每回备份都发生了 60份
备份文件,仔细查阅定时义务指令,发以往“分”的任务上,少加了个“0”,因为“*”表示该职责的任何2个值,修改如下:

1``0 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1

0 4 * * * /usr/local/php/bin/php
/usr/local/nginx/www/backup-db/backup_db.php 172.16.8.26
>/dev/null 2>&1
0 4 * * * /usr/local/php/bin/php
/usr/local/nginx/www/backup-db/backup_db.php 172.16.10.151
>/dev/null 2>&1

Crontab命令 详解整理 前言
crontab是Unix和Linux用于安装周期性被实施的一声令下,是互连网很常用的技能,很多职责都会安装在crontab循环…

  广义的网站的监察涵盖全体的非业务行为的数据搜集与治本,包含数据分析师和产品设计师采取的网站用户作为日志、业务运维数据,以及供运维工程师和花费工程师使用的品质计算数据等。

  广义的网站的督察涵盖全数的非业务行为的数目收集与管理,包罗数据分析师和产品设计师拔取的网站用户作为日志、业务运维数据,以及供运行工程师和开发工程师使用的质量计算数据等。

   
 本文紧即使经过shell脚本来收集服务器品质目的,如系统load、内存占用、磁盘IO、CPU占用,并将其写入一个文书中,及时判断应用情形,居安虑危。

   
 本文重即使通过shell脚本来收集服务器品质目的,如系统load、内存占用、磁盘IO、CPU占用,并将其写入四个文本中,及时判断应用情形,桑土绸缪。

  完毕步骤如下:

  已毕步骤如下:

第一步:编写shell脚本

vim check.sh

增加底下脚本之后保存 

#!/bin/bash
#这个脚本使用来统计CPU、磁盘、内存使用率、带宽的
total=0
system=0
user=0
i=0

#带宽使用情况
time=`date "+%Y-%m-%d %k:%M"`
day=`date "+%Y-%m-%d"`
minute=`date "+%k:%M"`
echo  "*************************************************************************" >> 123.txt
echo "统计开始时间:$day $minute" >> 123.txt

#循环五次,避免看到的是偶然的数据
echo "#带宽的使用情况:#" >>123.txt
while (( $i<5 ))
do
#原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式获取网卡的信息为空,已经注释掉
#rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
#tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
sleep 2
#rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
#tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')

rx_result=$[(rx_after-rx_before)/1024/1024/2*8]
tx_result=$[(tx_after-tx_before)/1024/1024/2*8]
echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>123.txt

let "i++"
done

rx_result=$(cat 123.txt|grep "$time"|awk '{In+=$4}END{print In}')
tx_result=$(cat 123.txt|grep "$time"|awk '{Out+=$7}END{print Out}')
In_Speed=$(echo "scale=2;$rx_result/5"|bc)
Out_Speed=$(echo "scale=2;$tx_result/5"|bc)
#echo "#带宽的5次的平均值是:#" >>123.txt
echo  "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>123.txt

#CPU使用情况
which sar > /dev/null 2>&1
if [ $? -ne 0 ]
then
  total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'`
  average=$(echo "scale=2;$total/5"|bc)
fi
echo "#CPU使用率:#" >>123.txt
echo "Total CPU  is already use: $average%" >>123.txt
#磁盘使用情况(注意:需要用sed先进行格式化才能进行累加处理)
disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}')
disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}')
disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc)
disk_percent1=$(echo $disk_all | cut -c 2-3)
disk_percent2=$(echo $disk_all | cut -c 4-5)
disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '`
echo "#磁盘利用率#" >>123.txt
echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt
echo -e "\t\t#磁盘存在目录使用率超过85%报警#" >>123.txt
echo -e "\t\tover used: $disk_warning" >>123.txt


#内存使用情况
memery_used=$(free -m | awk 'NR==2' | awk '{print $3}')
buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}')
cache_used=$(free -m | awk 'NR==2' | awk '{print $7}')
free=$(free -m | awk 'NR==2' | awk '{printf $4}')
memery_all=$(free -m | awk 'NR==2' | awk '{print $2}')
used_all=$[memery_all-(free+buffer_used+cache_used)]
echo "$used_all $memery_all $free" >>123.txt
memery_percent=$(echo "scale=4;$memery_used / $memery_all" | bc)
memery_percent2=$(echo "scale=4; $used_all / $memery_all" | bc)
percent_part1=$(echo $memery_percent | cut -c 2-3)
percent_part2=$(echo $memery_percent | cut -c 4-5) 
percent_part11=$(echo $memery_percent2 | cut -c 2-3)
percent_part22=$(echo $memery_percent2 | cut -c 4-5)
echo "#内存使用率#" >> 123.txt
echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt
echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt

echo  "结束本次统计:$day $minute" >> 123.txt
echo  "*************************************************************************" >> 123.txt
echo -e "\n\n\n\n" >> 123.txt

  第一步:编写shell脚本,如下:

第1步:创设shell脚本中用到的文件123.txt    

touch 123.txt

澳门金沙国际,    vim check.sh,添加底下脚本之后保存

其三步:给check.sh和123.txt予以全体权力  

chmod 777 check.sh
chmod 777 123.txt

澳门金沙国际 5

  1 #!/bin/bash
  2 #这个脚本使用来统计CPU、磁盘、内存使用率、带宽的
  3 #初始化一些下面用到的变量
  4 total=0
  5 system=0
  6 user=0
  7 i=0
  8 
  9 time=`date "+%Y-%m-%d %k:%M"`
 10 day=`date "+%Y-%m-%d"`
 11 minute=`date "+%k:%M"`
 12 echo  "*************************************************************************" >> 123.txt
 13 echo "统计开始时间:$day $minute" >> 123.txt
 14 
 15 #带宽使用情况
 16 echo "#带宽的使用情况:#" >>123.txt
 17 #循环五次,避免看到的是偶然的数据
 18 while (( $i<5 ))
 19 do
 20 #原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式获取网卡的信息为空,已经注释掉
 21 #rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 22 #tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 23 rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 24 tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 25 #休眠2s
 26 sleep 2
 27 #用sed先获取第7列,再用awk获取第2列,再cut切割,从第7个到最后,即只切割网卡流量数字部分
 28 #rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 29 #tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 30 rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 31 tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 32 #注意下面截取的相差2秒的两个时刻的累计和发送的bytes(即累计传送和接受的位)
 33 rx_result=$[(rx_after-rx_before)/1024/1024/2*8]
 34 tx_result=$[(tx_after-tx_before)/1024/1024/2*8]
 35 echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>123.txt
 36 let "i++"
 37 done
 38 #注意下面grep后面的$time变量要用双引号括起来
 39 rx_result=$(cat 123.txt|grep "$time"|awk '{In+=$4}END{print In}')
 40 tx_result=$(cat 123.txt|grep "$time"|awk '{Out+=$7}END{print Out}')
 41 In_Speed=$(echo "scale=2;$rx_result/5"|bc)
 42 Out_Speed=$(echo "scale=2;$tx_result/5"|bc)
 43 #echo "#带宽的5次的平均值是:#" >>123.txt
 44 echo  "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>123.txt
 45 
 46 
 47 #CPU使用情况
 48 #使用vmstat 1 5命令统计5秒内的使用情况,再计算每秒使用情况
 49 which sar > /dev/null 2>&1
 50 if [ $? -ne 0 ]
 51 then
 52   total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'`
 53   average=$(echo "scale=2;$total/5"|bc)
 54 fi
 55 echo "#CPU使用率:#" >>123.txt
 56 echo "Total CPU  is already use: $average%" >>123.txt
 57 
 58 
 59 #磁盘使用情况(注意:需要用sed先进行格式化才能进行累加处理)
 60 disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}')
 61 disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}')
 62 disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc)
 63 disk_percent1=$(echo $disk_all | cut -c 2-3)
 64 disk_percent2=$(echo $disk_all | cut -c 4-5)
 65 disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '`
 66 echo "#磁盘利用率#" >>123.txt
 67 echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt
 68 #echo -e "\t\t.." 表示换行
 69 echo -e "\t\t#磁盘存在目录使用率超过85%报警#" >>123.txt
 70 echo -e "\t\tover used: $disk_warning" >>123.txt
 71 
 72 
 73 #内存使用情况
 74 #获得系统总内存
 75 memery_all=$(free -m | awk 'NR==2' | awk '{print $2}')
 76 #获得占用内存(操作系统 角度)
 77 system _memery_used =$(free -m | awk 'NR==2' | awk '{print $3}')
 78 #获得buffer、cache占用内存,当内存不够时会及时回收,所以这两部分可用于可用内存的计算
 79 buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}')
 80 cache_used=$(free -m | awk 'NR==2' | awk '{print $7}')
 81 #获得被使用内存,所以这部分可用于可用内存的计算,注意计算方法
 82 actual_used_all =$[memery_all-(free+buffer_used+cache_used)]
 83 #获得实际占用的内存
 84 actual_used_all=`expr $memery_all - $free + $buffer_used + $cache_used `
 85 echo "$used_all" >> 123.txt
 86 memery_percent=$(echo "scale=4;$system _memery_used / $memery_all" | bc)
 87 memery_percent2=$(echo "scale=4; $actual_used_all / $memery_all" | bc)
 88 percent_part1=$(echo $memery_percent | cut -c 2-3)
 89 percent_part2=$(echo $memery_percent | cut -c 4-5)
 90 percent_part11=$(echo $memery_percent2 | cut -c 2-3)
 91 percent_part22=$(echo $memery_percent2 | cut -c 4-5)
 92 echo "#内存使用率#" >> 123.txt
 93 #获得占用内存(操作系统角度)
 94 echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt
 95 #获得实际内存占用率
 96 echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt
 97 echo "buffer is already used : $buffer_used M" >>123.txt
 98 echo "cache is already used : $cache_used M" >>123.txt
 99 
100 
101 echo  "结束本次统计:$day $minute" >> 123.txt
102 echo  "*************************************************************************" >> 123.txt
103 echo -e "\n\n\n\n" >> 123.txt

 第二步:创建shell脚本中用到的文件123.txt
    touch 123.txt
 第三步:给check.sh和123.txt授予所有权限
  chmod 777 check.sh
  chmod 777 123.txt

第四步:执行check.sh脚本   

./check.sh

澳门金沙国际 6

澳门金沙国际 7

第伍步:查看执行写入文件的情事

澳门金沙国际 8

并发那新闻表名脚本成功运转实时总结情状。

 

  第四步:执行check.sh脚本

参照小说

假设想使用定时职务,可使用crontab进行设置,请参见那篇小说

crontab的二种配备情势

 

学学本就是3个持续模仿、练习、再到结尾面自身原创的经过。

尽管如此只怕没有能写出当先网上通类型同大旨博文,但为什么还是要写?
于本人而言,博文主假诺和谐统计。假使自身有观者,毕竟讲是最好的学(见下图)。

于读者而言,小编能在那个进度get到知识点,那就是共赢了。
自然是因为我能力不难,大概文中存在描述不正确,欢迎指正、补充!
感激您的读书。假若本文对您有用,那么请点赞鼓励。

澳门金沙国际 9

 

 

    ./check.sh

澳门金沙国际 10

  第⑤步:查看执行写入文件的景况

澳门金沙国际 11

并发这音信表名脚本成功运维实时总括意况。

 

一旦想采纳定时职务,可采纳crontab进行设置,请参见那篇小说

crontab的几种配备格局

 

相关文章