Linux计划任务与日志的管理
本节所讲内容:
16.1 计划任务-at-cron-计划任务使用方法
16.1.1 计划任务的应用场景
计划任务在实际运用很多,现结合日常工作的实际例外列举几个:
1、管理的SQL 2008数据库时结合计划任务对重要数据库备份
2、管理的SQL 2008数据库时结合计划任务与批处理对规定时间前的备份数据进行删除
4、管理的WEB服务器会结合计划任务备份相关数据到其他服务器上
5、管理的WEB服务器会结合计划任务删除不需要的访问日志数据
等等
由此可见计划任务在我们的实际运维工作中得到很广泛的运用
16.1.2 crond 和 atd 说明
crond是定时性的,每隔一定的周期就要重复来做这个事情
atd是突发性的,只是在特定时间执行一次任务,完成后就结束
1)at计划任务的使用
[root@node-1 ~]# rpm -aq |grep atd
[root@node-1 ~]# yum -y install at
[root@node-1 ~]# systemctl start atd
[root@node-1 ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-03-05 20:27:41 CST; 21s ago
Main PID: 995 (atd)
CGroup: /system.slice/atd.service
└─995 /usr/sbin/atd -f

Mar 05 20:27:41 node-1 systemd[1]: Started Job spooling tools.
Mar 05 20:27:41 node-1 systemd[1]: Starting Job spooling tools...
[root@node-1 ~]# date
Thu Mar 5 20:28:39 CST 2020
[root@node-1 ~]# at 20:28
at> mkdir /opt/test
at> cp /etc/hosts /opt/
at>
job 1 at Fri Mar 6 20:28:00 2020
[root@node-1 ~]# at -l
1 Fri Mar 6 20:28:00 2020 a root
[root@node-1 ~]# ll /opt
total 0
检查at计划任务运行结果:
[root@node-1 ~]# ll /opt/
total 12
-rw-r--r-- 1 root root 158 Mar 5 20:35 hosts
-rw-r--r-- 1 root root 370 Mar 5 20:35 hosts.allow
-rw-r--r-- 1 root root 460 Mar 5 20:35 hosts.deny
drwxr-xr-x 2 root root 6 Mar 5 20:35 test
删除at计划任务
语法: atrm 任务编号
[root@node-1 ~]# at -l
1 Fri Mar 6 20:28:00 2020 a root
[root@node-1 ~]# atrm 1
2)contab定时任务的使用
crond命令定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。
linux任务调度的工作主要分为以下两类:
系统执行的工作:系统周期性所要执行的工作,如更新whatis数据库 updatedb数据库,日志定期切割,收集系统状态信息,/tmp定期清理
启动crond服务:
[root@node-1 ~]# systemctl start crond
cron命令参数介绍:
-u 用户名 #指定用户名cron服务
-l #列出当前用户的cron服务的详细内容
-u 用户名 -l #列出指定用户的cron服务的详细内容
-r #删除已建立的计划任务
-e #编辑已建立的计划任务
如:
crontab -u root -l # root查看自己的cron计划任务
crontab -u wangtao -r # root想删除wangtao的cron计划任务
crontab -e #编辑时的语法
如:定时同步时间的计划任务
/3 /sbin/ntpdate -u times.aliyun.com &> /dev/null
"五星"的含义:
第一颗"星":分钟 0-59
第二颗"星":小时 0-23
第三颗"星":日期 1-31
第四颗"星":月份 1-12
第五颗"星":星期 0-7
特殊用法:

  • 取值范围任何数字
    / 时间的间隔周期 */3 指每隔三分钟
  • 从数字1到数字2 10-15 从10到15
    , 从,分隔几个数字中取值 6,12 指6与12
    16.1.3创建计划任务
    例1:每天凌晨2点1分开始备份数据
    [root@node-1 ~]# crontab -e #添加计划任务
    /3 /sbin/ntpdate -u times.aliyun.com &> /dev/null
    --每隔3分钟同步时间
    常见写法:
    每天晚上2:00 重启nginx
    0 2
    /usr/local/sbin/nginx -s reload
    每月1、12、25日的4:45重启apache。
    45 4 1,12,25 systemctl restart httpd
    每月2到14日的3:00重启mariadb。
    0 3 2-14 systemctl restart mariadb
    每隔两天的上午8点到11点的第3和第15分钟重启apache
    3,15 8-11 /2    systemctl restart httpd
    周一到周五每天晚上 21:15 每隔一小时重启apache
    15 21
    * 1-5  systemctl restart httpd
    实战案例:
    每天1:50备份数据库到/backup/mysqldata
    将备份命令写入一个脚本backmysql.sh
    每天备份文件名要求格式: 2017-08-19_etc.tar.gz
    在执行计划任务时,不要输出任务信息
    存放备份内容的目录要求只保留7天的数据
    [root@node-1 ~]# vim /root/backmysql.sh
    内容如下:
    #!/bin/bash
    mkdir -p /backup/mysqldata
    /usr/local/mysql/bin/mysqldump -p123456 -u root --lock-tables=false --all-databases | gzip > /backup/mysqldata/mysqldata.$(date +%Y%m%d).sql.gz
    rm -rf /backup/mysqldata/mysqldata.$(date -d '7 days ago' +%Y%m%d).sql.gz

[root@node-1 ~]#crontab -e
0 2 /root/backmysql.sh & > /dev/null
说明:
删除7天前的备份有好几种写法
(1)rm -rf /backup/mysqldata/mysqldata.$(date -d '7 days ago' +%Y%m%d).sql.gz
(2)find /backup/mysqldata -name "mysqldata
.gz" -mtime +7 -exec rm -f {} \;
(3)find /backup/mysqldata -name "mysqldata*.gz" -mtime +7 | xargs rm -f
16.2 日志的种类和记录的方式-自定义ssh服务日志类型和存储位置
16.2.1 常见日志文件的作用
系统日志文件概述:/var/log目录保管由rsyslog维护的,里面存放的一些特定于系统和服务的日志文件
[root@node-1 ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-03-06 19:42:03 CST; 7h left
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 828 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─828 /usr/sbin/rsyslogd -n

Mar 06 19:42:02 node-1 systemd[1]: Starting System Logging Service...
Mar 06 19:42:03 node-1 rsyslogd[828]: [origin software="rsyslogd" swVersion="8.24.0" x-pid="828" x-...tart
Mar 06 19:42:03 node-1 systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.
日志文件 用途
/var/log/message 大多数系统日志消息记录在此处
/var/log/secure 安全和身份验证相关的消息和登录失败的日志文件。 ssh远程连接产生的日志
/var/log/maillog 与邮件服务器相关的消息日志文件
/var/log/cron 与定期执行任务相关的日志文件
/var/log/boot.log 与系统启动相关的消息记录
/var/log/dmesg 与系统启动相关的消息记录
统计登录系统失败的IP与次数
[root@node-1 ~]# grep Failed /var/log/secure | awk '{print $11}'|uniq -c
6 192.168.26.1
1)/var/log/wtmp也是一个二进制文件,记录每个用户的登录次数和持续时间等信息,这个是登录成功的记录
[root@node-1 ~]# last -f /var/log/wtmp
root pts/0 192.168.26.1 Wed Mar 4 22:43 - crash (19:14)
.......
2)/var/log/btmp文件是记录错误登录系统的日志。如果发现/var/log/btmp日志文件大于1M,就说明很多人在暴力破解ssh服务,此日志需要使用lastb程序查看
[root@node-1 ~]# lastb | awk '{ print $3}' | sort | uniq -c | sort -n
1
1 Fri
4 192.168.26.1
此时可以用防火墙也可用hosts.deny来处理
16.2.2在centos7中的rsyslog日志服务
rhel6-7 ->服务名称rsyslog ->配置文件 /etc/rsyslog.conf
[root@node-1 ~]# egrep -v "^$|^#" /etc/rsyslog.conf
$ModLoad ommysql
. :ommysql:localhost,Syslog,rsyslog,wangtao
$ModLoad imuxsock # provides support for local system
logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd j
ournal$ModLoad immark # provides --MARK-- message capabili
ty$ModLoad imudp
$UDPServerRun 514
.......
在此不详细说明每个配置文件的作用,用实战来实现体现配置文件作用
实战1:对于主从同步数据库日志处理
说明:mysql的log型的同步对数据库的日志管理很重要,见过log-bin日志高达20G的服务器
解决方法:
在【mysqld】下加入以下两行
expire_logs_days=10 --日志文件只保留10个
max_binlog_size=50M --日志文件不超过50M

实战2:使用logrotate 进行nginx日志分割
日志的切割:在linux下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割。
logrotate配置文件主要有:
【/etc/logrotate.conf 以及 /etc/logrotate.d/ 这个子目录下的明细配置文件】
logrotate的执行由crond服务调用的。实际生产环境一般把需要切割的日志配置文件都写在/etc/logrotate.d/目录下
[root@node-1 ~]#vim /etc/logrotate.d/nginx
添加下下内容
/usr/local/nginx/logs/*.log { #指定日志文件位置,可用正则匹配
daily #调用频率,有:daily,weekly,monthly可选
rotate 7 #一次将存储7个归档日志。对于第8个归档,时间最久的归档将被删除。
sharedscripts #所有的日志文件都轮转完毕后统一执行一次脚本
postrotate #执行命令的开始标志
if [ -f /usr/local/nginx/logs/nginx.pid ];
then #判断nginx是否启动
/usr/local/nginx/sbin/nginx -s reload

fi
endscript #执行命令的结束标志
}
实际部署项目的时候是根据客户对日志保存的需求进行调整的,如access.log这个访问日志一般保留一个月,error.log一般保留一周。
--对于apache日志也可以这样配置,注意文件路径即可。
实战3:部署Rsyslog+LogAnalyzer+MySQL中央日志服务器
链接:https://blog.51cto.com/450955/2476250
实战4:部署ELK日志服务群集
这部分是自费购买”实践哥“学习的,会在以后的博文中写出来,这里链接此学习的地址:https://edu.51cto.com/course/17248.html
购买了这位老师的7部学习视频,如redis这个在上个项目中已经实际使用,很有帮助,