一、系统资源查看相关命令
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 目录中的所有可执行文件。