码迷,mamicode.com
首页 > 其他好文 > 详细

系统管理之资源与定时任务

时间:2019-12-12 23:59:06      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:情况   读取   解决   工作   开机自启动   环境变量   deny   ide   性能   

一、系统资源查看相关命令

1、vmstat 命令监控系统资源
[root@centos ~]# vmstat 1 3
#每一秒刷新一次,共刷新三次

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 329960  21424  49564    0    0   324    34   84  140  1  2 91  6  0    
 0  0      0 329928  21424  49560    0    0     0     0   26   29  0  0 100  0  0   
 0  0      0 329928  21424  49560    0    0     0     0   27   32  0  0 100  0  0
procs:进程信息字段:
 r:等待运行的进程数,数量越大,系统越繁忙。
 b:不可被唤醒的进程数量,数量越大,系统月繁忙
memory:内存信息字段:
 swpd:虚拟内存的使用情况,单位 KB。
 free:空闲的内存容量,单位 KB。
 buff:缓冲的内存容量,单位 KB。
 cache:缓存的内存容量,单位 KB。
swap:交换分区的信息字段:
 si:从磁盘中交换到内存中数据的数量,单位 KB。
 so:从内存中交换到磁盘中数据的数量,单位 KB。此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。
io:磁盘读写信息字段:
 bi:从块设备读入数据的总量,单位是块。
 bo:写到块设备的数据的总量,单位是块。此两个数越大,代表系统的 I/O 越繁忙。 
system:系统信息字段:
 in:每秒被中断的进程次数。
 cs:每秒钟进行的事件切换次数。此两个数越大,代表系统与接口设备的通信非常繁忙。
CPU:CPU 信息字段:
 us:非内核进程消耗 CPU 运算时间的百分比。
 sy:内核进程消耗 CPU 运算时间的百分比。
 id:空闲 CPU 的百分比。
 wa:等待 I/O 所消耗的 CPU 百分比。
 st:被虚拟机所盗用的 CPU 占比 
2、dmesg 显示开机时内核检测信息
#dmesg 输出的信息很多,需要自己过滤
[root@centos ~]# dmesg | grep "eth0"       #网卡相关信息

[root@centos ~]# dmesg | grep "cpu"        #cpu信息
3、free 命令查看内存使用状态
[root@centos ~]# free 选项
选项:
-b: 以字节为单位显示  
-k: 以 KB 为单位显示,默认就是以 KB 为单位显示  
-m: 以 MB 为单位显示  
-g: 以 GB 为单位显示
-h:  友好显示 

[root@centos ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          474M       152M       322M       228K        20M        48M
-/+ buffers/cache:        83M       391M
Swap:         1.9G         0B       1.9G

第一行       总内存       已使用      空闲     多进程共享    缓冲        缓存
第二行        used-buffers-cached    free+buffers+cached
第三行       总量         已使用       空闲
4、查看 CPU 信息

CPU 的主要信息保存在/proc/cpuinfo 这个文件当中,我们只要查看这个文件,就可以知道 cpu 的相关信息。

[root@centos ~]# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 94
......
5、查看本机登陆用户信息

如果我们想要知道 Linux 服务器上目前已经登录的用户信息,可以使用 w 或 who 命令来进行查询。

 15:48:51 up 23 min,  1 user,  load average: 0.01, 0.02, 0.05
当前时间   开机时间    一个用户   过去,5 ,10,15 min 的负载
USER     TTY      FROM              LOGIN@       IDLE       JCPU   PCPU     WHAT
用户     登录终端  从哪里登录         登陆时间     用户闲置时间                 当前在做什么
root     pts/0    100.100.100.1    15:28          0.00s     0.04s  0.00s      w

JCPU   指的是和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去 的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。
PCPU   是指当前进程所占用的 CPU 运算时间。
6、查看系统与内核相关信息
[root@centos ~]# uname [选项] 选项:  
-a: 查看系统所有相关信息;  
-r: 查看内核版本;  
-s: 查看内核名称

#可以通过 file 命令来判断系统文件(主要是系统命令)的位数来推断系统的位数
[root@centos ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

二、定时任务

使用 at 命令 设置执行一次的定时任务。
1、at 服务管理与访问控制

at 命令要想正确执行,需要 atd 服务的支持。atd 服务是独立的服务,需要保证服务已经正常启动。

[root@centos ~]# service atd start #一般情况下服务默认启动
[root@centos ~]# chkconfig atd on  #设置开机自启
[root@centos ~]# chkconfig --list | grep 'atd'
atd             0:off   1:off   2:on    3:on    4:on    5:on    6:off

atd 服务启动之后,at 命令才可以正常使用,不过我们还需要了解下at 命令的访问控制。这里的访问控制指的是允许哪些用户使用 at 命令设定定时任务,或者不允许哪些用户使用 at 命令,at 的访问控制是依靠/etc/at.allow 文件(白名单)和/etc/at.deny 文件(黑名单)这两个文件来实现的。

  • 如果系统中有/etc/at.allow 文件,那么只有写入/etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(/etc/at.deny 文件会被忽略,也就是说同一个用户既写入/etc/at.allow 文件,也写入/etc/at.deny 文件,那么这个用户是可以使用 at 命令的,因为/etc/at.allow 文件优先级更高。
  • 如果系统中没有/etc/at.allow 文件,只有/etc/at.deny 文件,那么写入/etc/at.deny 文件 (黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
  • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。 系统中默认时只有/etc/at.deny 文件,而且这个文件是空的,这样的话系统中所有的用户都可以 使用 at 命令。不过如果我们打算控制用户的 at 命令权限,把用户写入/etc/at.deny 文件即可 /etc/at.allow 文件的权限更高,如果/etc/at.allow 文件存在,则/etc/at.deny 文件失效。 /etc/at.allow 管理行为更加严格,因为只有写入这个文件的用户才能使用 at 命令,如果需要禁用 at 命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny 文件的管理较为松散,如果允许使用 at 命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对 root 用户生效。
2、at命令
[root@centos ~]# at [选项] 时间 
选项:  
-m:   当 at 工作完成后,无论是否命令有输出,都用 email 通知执行 at 命令的用户  
-c 工作号:  显示该 at 工作的实际内容
时间:   at 支持的时间格式如下:  
HH:MM    在指定的“小时:分钟”执行命令,例如:02:30  
HH:MM YYYY-MM-DD 在指定的“小时:分钟 年-月-日”执行,例如 02:30 2018-07-25  
HH:MM[am|pm] [month] [date]  在指定的“小时:分钟[上午|下午][月][日]”执行,例如 02:30 July 25  
HH:MM[am|pm] + [minutes|hours|days|weeks] 在指定的时间“再加多久执行”,例如 now + 5 minutes,05am +2 hours 

at 命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了,这个命令可以是系统命令,也可以是 shell 脚本。

例子 1:在五分钟后执行hello脚本
[root@centos ~]# cat 1.sh 
#!/bin/bash
echo "hello"

[root@centos ~]# at now +2 minutes 
at> /bin/bash /root/1.sh
at> <EOT>  ctrl + d 保存任务
job 2 at 2019-12-10 16:21

例子 2: #在三点执行重启操作
[root@centos ~]# at 15:00 2019-12-12
at> /bin/sync                 
at> /sbin/shutdown -r now
at> <EOT>
job 3 at 2019-12-12 15:00
3、at管理命令
1)查询 atq
[root@centos ~]# atq
3   2019-12-12 15:00 a root

2)删除 atrm  [工作号] 
[root@centos ~]# atrm 3
多次执行的定时任务crontab
1、crond 服务管理与访问控制 crontab 命令是需要 crond 服务支持的,所以要保证其正常运行。
[root@centos ~]# service crond start #启动 crond 服务
[root@centos ~]# chkconfig crond on # 设定 crond 服务为开机自启动  crond 服务默认是自启动的。

crontab 命令和 at 命令类似,也是通过/etc/cron.allow 和/etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。

  • 当系统中有/etc/cron.allow 文件时,只有在此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样如果有此文件,/etc/cron.deny 文件会被忽略。
  • 当系统中只有/etc/cron.deny 文件时,则写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。 这个规则基本和 at 的规则一直,同样/etc/cron.allow 文件的优先级比/etc/cron.deny 文件的优先级高,Linux 中默认只有/etc/cron.deny 文件。
2、crontab 单用户设置
[root@localhost ~]# crontab [选项] 
选项:  
-e:  编辑 crontab 定时任务  
-l:  查询 crontab 任务  
-r:  删除当前用户所有的 crontab 任务,如果有多个任务,只想删除一个,可以所以用“crontab -e”  
-u 用户名: 修改或删除其他用户的 crontab 任务。只有 root 可用 

[root@centos ~]# crontab -e #针对当前用户的crontab任务编辑界面
第一个“*” 一小时当中的第几分钟 0-59 
第二个“*” 一天当中的第几小时 0-23 
第三个“*” 一个月当中的第几天 1-31 
第四个“*” 一年当中的第几月 1-12 
第五个“*” 一周当中的星期几 0-7(0 和 7 都代表星期日)

* 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
, 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在 每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令 
- 代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨 5 点 0 分执行命令 
*/n 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔 10 分钟就执行一遍命令

crontab 例子

0 5 * * * /sbin/shutdown -r now   #每天凌晨五点执行重启操作
0 5 * * 6  mysqldump  -u root -p123456 info > /root/info.dump #每周6凌晨5点备份info数据库
3、在书写 crontab 定时任务时,需要注意几个注意事项
  • 六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间。
  • crontab 定时任务,最小有效时间是分钟,最大时间范围是月。像 2019 年某时执行,3 点 30 分 30 秒这样的时间都不能识别.
  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都是以天作为单位, 非常容易让管理员混乱
  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径。
4、系统的 crontab 设置

“crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可 是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab 这个配置文件了。当然,并不是说 写入/etc/crontab 配置文件中的定时任务执行时,不需要用户身份,而是“crontab -e”命令定义定 时任务时,默认用户身份是当前登录用户。而修改/etc/crontab 配置文件时,定时任务的执行着身份 是可以手工指定的。这样定时任务的执行会更加灵活,修改起来也更加方便。

[root@centos ~]# vim /etc/crontab
SHELL=/bin/bash    #指定shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin  # 指定 PATH 环境变量
MAILTO=root  # 如果有报错输出,或命令结果有输出,会向 root 发信息
HOME=/  # 标示主目录

# For details see man 4 crontabs  #出现失败时,可以查看 crontabs 4等级的帮助

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

1)crontab配置方法

  • 把你需要定时执行的工作写成脚本程序,并赋予执行权限,然后直接把这个脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个。比如我需要让某个脚本每周执行,那么就把这个脚本复制到/etc/cron.weekly/目中。这样这个脚本就会每周执行一次,具体的执行时间要参考 anacron 的配置。
  • 第二种方法就是修改/etc/crontab 这个配置文件,自己加入自己的定时任务,不过需要注意指定脚本的执行者身份。
6、anacron

anacron 是用来干什么的呢?我们的 Linux 服务器如果不是 24 小时开机的,那么刚好在关机的时间段之内有系统定时任务(cron)需要执行,那么这些定时任务是不会执行的。也就是说,假设我们需要在凌晨 5 点 05 分执行系统的日志备份,但是我们的 Linux 服务器不是 24 小时开机的,在晚上需要关机,白天才会再次开机。这个定时任务的执行时间我们的服务器刚好没有开机,那么这个任务就不会执行了。anacron 就是用来解决这个问题的。
anacron 会使用一天,七天,一个月作为检测周期,用来判断是否有定时任务在关机之后没有执行,如果有这样的任务,anacron 会在特定的时间重新执行这些定时任务。在系统的/var/spool/anacron/ 目录中存在 cron.{daily,weekly,monthly}文件,

[root@centos ~]# vim /var/spool/anacron/cron.
cron.daily    cron.monthly  cron.weekly

这些文件中都保存着 anacron 上次执行时的时间。anacron 会去读取这些文件中的时间,然后和当前时间做比较,若果两个时间的差值超过了 anacron 的指定时间差值(一般是 1 天,7 天和一个月),就说明有定时任务漏掉了没有被执行,这时 anacron 会介入而执 行这个漏掉的定时任务,从而保证在关机时没有被执行的定时任务不会被漏掉。在 CentOS 6.x 中,我们使用 cronie-anacron 取代了 vixie - cron 软件包。而且在原先的 CentOS 版本中 /etc/ cron.{daily,weekly,monthly}这些目录中的定时任务会同时被 cron 和 anacron 调用, 这样非常容易出现重复执行同一个定时任务的错误。
在现在的 CentOS 6.x 中, /etc/cron.{daily,weekly,monthly}目录中的定时任务程序只会被 anacron 调用,从而保证这些定时任务只会在每天、每周或每月被定时执行一次,而不会重复。

[root@centos ~]# anacron [选项] [工作名] 
选项:  
-s: 开始 anacron 工作,依据/etc/anacrontab 文件中的设定的延迟时间执行  
-n: 立即执行/etc/anacrontab 中所有的工作,忽略所有的延迟时间  
-u: 更新/var/spool/anacron/cron.{daily,weekly,monthly}文件中的时间戳,但不执行任何工作 
参数:  工作名: 是依据/etc/anacrontab 文件中定义的工作名

anacron的配置文件为 /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# 最大随机延迟。
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#anacron 的执行时间范围是 3:00 - 22:00

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
时间差    推迟执行分钟   工作名称         实际执行命令      

所以crontab中定义的定时任务,从本质上还是依赖 anacron 的配置文件。
我们用 cron.daily 工作来说明下/etc/anacrontab 的执行过程:

  • 首先读取/var/spool/anacron/cron.daily 中的上一次 anacron 执行的时间
  • 和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 工作
  • 执行这个工作只能在 03:00-22:00 之间
  • 执行工作时强制延迟时间为 5 分钟,再随机延迟 0-45 分钟时间;
  • 使用 nice 命令指定默认优先级,使用 run-parts 脚本执行/etc/cron.daily 目录中的所有可执行文件。

系统管理之资源与定时任务

标签:情况   读取   解决   工作   开机自启动   环境变量   deny   ide   性能   

原文地址:https://www.cnblogs.com/hjnzs/p/12029116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!