文章目录
1、定义
按照计划去完成任务、定时去完成任务
- 用户设置了计划任务,但是这个用户没有登录系统,是否每天还是会执行?
会,不管用户有没有登录,都会去执行计划任务
2、用途
linux运维过程中:
数据备份:备份的时候会消耗cpu、内存、磁盘、网络宽带
3、计划任务分类
3.1 at命令
调用atd进程,只执行一次,需要启动atd服务
/var/spool/at 存放一次性计划任务的目录,a开头的文件
任务执行完毕,文件消失
[root@lamp-test ~]# at 11:00 创建一个一次性执行的计划任务
at> bash /root/wang.sh
at> <EOT>
job 5 at Wed Dec 22 11:00:00 2021
[root@lamp-test ~]# at -l 查看计划任务列表
3 Wed Dec 22 10:20:00 2021 a root
5 Wed Dec 22 11:00:00 2021 a root
[root@lamp-test ~]# atrm 3 删除计划任务编号为3的任务
batch命令和at命令相同,向atd提交任务,在系统不忙的时候运行
3.2 crontab命令
进程名字:crond (周期性任务)
/var/spool/cron 存放crontab创建的周期性计划任务
crontab服务:调用crond进程,有固定周期
crontab -e 创建计划任务
crontab -u liangluyao -e 给指定用户创建计划任务
crontab -l 查看计划任务
crontab -u liangluyao -l 查看指定用户计划任务
crontab -r 删除计划任务(全部删除,危险)
crond 进程,每间隔1分钟去/var/spool/cron 检查下用户的计划任务,crond进程开机就运行了,是守护进程
daemon守护进程:一直在内存里面运行的进程,直到人为停止它的运行,因为一直在内存里运行,用户可以随时去访问,所以他一直守护着你。
4、cron 周期计划任务
配置文件:/etc/crontab,
日志文件:/var/log/cron,日志中有CMD标志表示计划任务已经执行
计划任务文件:/var/spool/cron 存放用户的计划任务
时间调整
ntpdate命令同步时间(和互联网上的时间服务器同步时间)
适用于centOS 7
[root@lamp-test log]# date -s "2021-12-22 15:6:12" 修改时间
[root@lamp-test log]# yum install ntpdate -y
[root@lamp-test log]# ntpdate time.windows.com 同步时间
22 Dec 11:59:38 ntpdate[13102]: step time server 20.189.79.72 offset -11225.674351 sec
chrony 服务
适用于centOS 8
[root@lamp-test log]# rpm -qf /usr/sbin/chronyd 通过已经安装的命令查询是通过那个软件安装过来的
[root@lamp-test log]# yum install chrony -y 安装
[root@hahah etc]# date -s "2021-12-12 15:15:15" #调整日期
2021年 12月 12日 星期日 15:15:15 CST
[root@hahah etc]# service chronyd restart #同步时间
Redirecting to /bin/systemctl restart chronyd.service
[root@hahah etc]# date
2021年 12月 22日 星期三 12:02:44 CST
练习1:计划任务写法
50 7 * * * service sshd start
50 22 * * * service sshd stop
* 12 */5 * * rm -rf /var/ftp/pub/*
30 7 * * 6 service httpd restart
30 17 * * 1,3,5 tar -czf /backup/httpd$(date +%F).tar.gz /etc/httpd
练习2:编写脚本备份文件
[root@hahah backup]# cat backup_log.sh
#!/bin/bash
mkdir -p /backup
tar -czf /backup/$(date +%F_%H_%M_%S)-log.tar.gz /var/log # 打包的时候要接绝对路径
find /backup -mtime +7 -type f -name "*-log.tar.gz" -exec rm -rf {} \;
crontab -l 查看定时任务
30 4 * * * bash /backup/backup_log.sh
6、anacron服务
anacron服务 :开机时自动运行,弥补cron服务在系统关机后不能执行计划任务的问题,但不能替代cron
/var/spool/anacrond :开机时自动运行,未执行的计划任务执行一遍后,arncron就会自动停止
按天、周或月为单位去检查系统未进行的cron任务/var/spool/anacron
服务名称:/etc/init.d/anacrond
[root@hahah backup]# cd /var/spool/anacron
[root@hahah anacron]# ll
总用量 12
-rw-------. 1 root root 9 12月 22 10:32 cron.daily
-rw-------. 1 root root 9 12月 16 03:08 cron.monthly
-rw-------. 1 root root 9 12月 20 03:30 cron.weekly
7、安全问题
如何找出有非法的计划任务?
- /var/spool/cron 用户自定义的计划任务
- /etc/cron.daily、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 操作系统的计划任务
crond进程会去这些地方去找。
[root@hahah cron]# ls /etc/cron*
/etc/cron.deny 黑名单 /etc/crontab crond的总的配置文件
/etc/cron.d: 存放计划任务的目录
0hourly
/etc/cron.daily: 每天需要执行的脚本
logrotate
/etc/cron.hourly: 每小时需要执行的脚本
0anacron
/etc/cron.monthly: 每个月需要执行的脚本
/etc/cron.weekly: 每周需要执行的脚本
/etc/cron.d/0hourly 文件内容见下图
[root@lamp-test cron.d]# cat 0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
每小时执行 /etc/cron.hourly 文件夹里的脚本,引出了顺风车
run-parts是一个命令,会去遍历文件夹里的脚本去执行 --》for
顺风车
在/etc/cron.hourly 目录下面写脚本,赋予可执行权限。后面就会定时执行这个脚本
[root@lamp-test cron.hourly]# pwd
/etc/cron.hourly
[root@lamp-test cron.hourly]# ls
0anacron poweroff.sh
[root@lamp-test cron.hourly]# cat poweroff.sh
init 0
[root@lamp-test cron.hourly]# chmod +x poweroff.sh
8、负载均衡
系统的性能:cpu使用率,内存使用率,磁盘IO,网络IO,进程数量
uptime
[root@hahah etc]# uptime 查看系统开了多久,以及系统的平均负载
10:28:58 up 11:24, 4 users, load average: 0.00, 0.00, 0.00
查看cpu核心数量:
cat /proc/cpuinfo
top——按1,有几个%Cpu就有几个核心(uptime是top的第一行)
man uptime
the system load averages for the past 1, 5, and 15 minutes.
系统过去1分钟、5分钟和15分钟的平均负载。
System load averages is the average number of processes that are either in a runnable or uninterruptable state.
系统平均负载是处于可运行或不可中断状态的进程的平均数量。
load average
在cpu里面可运行(就绪队列)的进程的平均数量。
处于可运行状态的进程要么正在使用CPU,要么正在等待使用CPU。 处于不可中断状态的进程正在等待某些I/O访问,例如等待磁盘。
平均值是在三个时间间隔内取的。
平均负载没有按照系统中的CPU数量进行规范化,因此平均负载为1意味着单个CPU系统一直处于加载状态,而在4个CPU系统中则意味着75%的时间处于空闲状态。
如何查看哪个进程在哪个cpu里面运行?
top—> f --> 空格 选中P–>按esc退出
电脑里面只有1个核心,就绪队列里面有1个进程在排队,就算cpu已经满负荷运转了。
电脑里面有8个核心,就绪队列里面有8个进程在排队,cpu就满负荷转了。
当值为1 的时候,cpu处于饱和状态运行。0~5是cpu能够接受的一个负载,超过5,说明cpu非常忙。
top
# 将进程放到后台运行
[root@master ~]# vim hejin.txt &
[1] 24234
# 因为vim是前台进程,放到后台不运行,所以是stop状态
[root@master ~]# top
top - 16:03:24 up 3:21, 4 users, load average: 0.02, 0.02, 0.05
Tasks: 126 total, 1 running, 123 sleeping, 2 stopped, 0 zombie
...
# 查看后台进程
[root@master ~]# jobs
[1]- 已停止 vim hejin.txt
[2]+ 已停止 top
# 将后台进程调到前台运行
[root@master ~]# fg 1
vim hejin.txt
# 迭代一次
[root@master ~]# top -n 1