Linux计划任务与日志

计划任务

  • 计划任务主要是做一下周期性的任务,目前主要用途是定期备份数据

一次调度执行at

  • 语法格式

    at <TIMESPEC>
        now +5min
        teatime tomorrow (teatime is 16:00)
        noon +4 days
        5pm august 3 2021
    
  • 例1

    [root@localhost ~]#yum install -y at
    [root@localhost ~]#systemctl start atd
    [root@localhost ~]#systemctl enable atd
    [root@localhost ~]#at now+1min
    at>useradd zhangsan
    at> <EOT>		#ctrl+D结束
    job 1 at Thu Aug 27 15:35:00 2020
    [root@localhost ~]#atq	#显示系统中待执行的任务列表
    1 Thu Aug 27 15:35:00 2020 a root
    [root@localhost ~]# id zhangsan
    uid=6671(zhangsan) gid=6671(zhangsan)=6671(zhangsan)
    
  • 例2

    [root@localhost ~]#vi at.jobs
    touch /root/`date +%F`.txt
    useradd eagleslab
    [root@localhost ~]#at now+1min < at.jobs
    [root@localhost ~]#ls
    2020-08-27.txt anaconda-ks.cfg at.jobs
    [root@192 ~]# id eagleslab
    uid=6672(eagleslab) gid=6672(eagleslab)=6672(eagleslab)
    
  • /etc/at. {allow ,deny}控制用户是否能执行at任务

    • 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
    • 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny文件中的用户则可执行
    • 如果两个文件都不存在,则只有root可以执行at命令

循环调度执行cron用户级

  • cron在使用之前必须要启动守护进程
[root@localhost ~]#systemctl start crond
[root@localhost ~]#systemctl enable crond
[root@localhost ~]#ps aux | grep crond
root 6242 0.3 0.0 126380 1656 ? Ss 16:27 0:00
/usr/sbin/crond -n
  • crond进程每分钟会处理一次计划任务

  • 存储位置

    [root@localhost ~]#ls /var/spool/cron
    
  • 管理命令

    [root@localhost ~]#crontab -l    #列出当前用户所有计划任务
    [root@localhost ~]#crontab -r    #删除当前用户计划任务
    [root@localhost ~]#crontab -e	 #编辑当前用户计划任务
    管理员可以使用 -u username,去管理其他用户的计划任务
    [root@localhost ~]#vi /etc/cron.deny    #这个文件中加入的用户名无法使用cron,也就是黑名单
    
  • cron语法格式

    分 时 日 月 星期 命令
    * 表示任何数字都符合
    0 2 * * * /run.sh # 每天的2点
    0 2 14 * * /run.sh # 每月14号2点
    0 2 14 2 * /run.sh # 每年2月14号2点
    0 2 * * 5 /run.sh # 每个星期5的2点
    0 2 * 6 5 /run.sh # 每年6月份的星期5的2点
    0 2 2 * 5 /run.sh # 每月2号或者星期5的2点 星期和日同时存在,那么就是或的关系
    0 2 2 6 5 /run.sh # 每年6月2号或者星期5的2点
    /5 * * * * /run.sh # 每隔5分钟执行一次
    0 2 1,4,6 * * /run.sh # 每月1号,4号,6号的2点
    0 2 5-9 * * /run.sh # 每月5-9号的2点
    * * * * * /run.sh # 每分钟
    0 * * * * /run.sh # 每整点
    * * 2 * * /run.sh # 每月2号的每分钟
    

循环调度执行cron系统级

  • 临时文件的清理 /tmp /var/tmp
  • 系统信息的采集 sar
  • 日志的轮转(切割) logrotate
  • 通常不是由用户定义
  • 文件的位置
[root@localhost ~]#vim /etc/crontab		#默认没有定义任何计划任务
[root@localhost ~]# ls /etc/cron.d # 定义的计划任务每个小时会执行
0hourly
[root@localhost ~]#cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly # 每小时01分以root身份执行/etc/cron.hourly/目录下的所有脚本
  • crond仅仅会执行每小时定义的脚本/etc/cron.hourly
[root@localhost ~]#ls /etc/cron.hourly
[root@localhost ~]#cat /etc/cron.hourly/0anacron
/usr/sbin/anacron -s # anacron是用来检查是否有错过的计划任务需要被执行
[root@localhost ~]# vi /etc/anacrontab
1 5 cron.daily nice run-parts /etc/cron.daily
#每天开机 5 分钟后就检查 /etc/cron.daily 目录内的文件是否被执行,如果今天没有被执行,那就执行
7 25 cron.weekly nice run-parts /etc/cron.weekly
#每隔 7 天开机后 25 分钟检查 /etc/cron.weekly 目录内的文件是否被执行,如果一周内没有被执行,就会执行
©monthly 45 cron.monthly nice run-parts /etc/cron.monthly
#每隔一个月开机后 45 分钟检查 /etc/cron.monthly 目录内的文件是否被执行,如果一个月内没有被执行,那就执行

日志管理基础

处理日志的进程

rsyslogd :绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务 at,cron
httpd/nginx/mysql 等等应用可以以自己的方式记录日志

[root@localhost ~]#ps aux |grep rsyslogd
root 6789 0.2 0.2 216416 4068 ? Ssl 14:17 0:00
/usr/sbin/rsyslogd -n

日志可以存放在本地
日志可以存放在远程服务器

常见的日志文件(系统、进程、应用程序)

日志文件作用描述
tail /var/log/messages系统主日志文件
tail -20 /var/log/messages
tail -f /var/log/messages动态查看日志文件的尾部
tailf /var/log/secure认证、安全
tail /var/log/maillog和邮件postfix相关
tail /var/log/croncrond、at进程产生的日志
tail /var/log/dmesg和系统启动相关
tail /var/log/audit/audit.log系统审计日志
tail /var/log/yum.logyum
tail /var/log/mysqld.logMySQL
tail /var/log/xferlog访问FTP服务器相关
w当前登录的用户 /var/log/wtmp
last最近登录的用户 /var/log/btmp
lastlog所有用户的登录情况 /var/log/lastlog

案例1:统计登录失败top5

[root@localhost ~]#grep -i 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c |sort -k1 -n -r |head -5
#grep筛选	  -i不区分大小写
#awk文本分析处理工具
#sort排序
#uniq去重   -c显示重复几次
#head  查看开头的n行
779 hadoop
501 test
261 183.240.132.21
224 user
21 195.54.160.183

awk语法详见博客(6条消息) Linux命令之awk详细介绍_速趴赛亚金的博客-CSDN博客_linux中awk啥意思

案例2:统计登录成功

[root@localhost ~]# grep 'Accepted' /var/log/secure |awk '{print $(NF-3)}' |sort |uniq -c
4 117.90.214.165
2 122.194.35.187
# 直接写$(NF) 指的就是最后一列
# 如果是$(NF-3) 减去3,就是倒数第四列

案例3:查看网卡是否已被驱动

[root@localhost ~]# grep -i eth /var/log/dmesg
[ 2.090634] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:bb:9a:bb
[ 2.090642] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection

rsyslogd子系统

在这里插入图片描述

[root@localhost ~]#rpm -qc rsyslog
/etc/logrotate.d/syslog # 日志轮转(切割)相关
/etc/rsyslog.conf # rsyslogd的主配置文件
/etc/sysconfig/rsyslog # rsyslogd相关文件
[root@localhost ~]#vim /etc/rsyslog.conf
# 告诉rsyslogd进程 哪个设备(facility),关于哪个级别的信息,以及如何处理
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
authpriv.* * #
所有终端
authpriv.* @192.168.1.123 #
UDP
authpriv.* @@192.168.1.123 #
TCP

设备facility相关内容,查看man手册https://man7.org/linux/man-pages/man3/syslog.3.html

设备类型(表示日志类型)解释
LOG_AUTHPRIV安全认证
LOG_CRONcron 和 at
LOG_DAEMON后台进程
LOG_FTPftp进程
LOG_KERN内核信息
LOG_LOCAL0 through LOG_LOCAL7用户自定义设备
LOG_LPR打印机子系统
LOG_MAIL邮件系统
LOG_NEWS新闻子系统
LOG_SYSLOGsyslogd自身产生的日志
级别(日志重要级别)解释
LOG_EMERG紧急,致命,服务无法继续运行,如配置文件丢失
LOG_ALERT报警,需要立即处理,如磁盘空间使用95%
LOG_CRIT致命行为
LOG_ERR错误行为
LOG_WARNING警告信息
LOG_NOTICE普通
LOG_INFO标准信息
LOG_DEBUG调试信息,排错才开,一般不建议使用
  • 案例1
    • 将authpriv设备日志记录到/var/log/auth.log
vim /etc/rsyslog.conf
#authpriv.* /var/log/secure
authpriv.* /var/log/auth.log
  • 案例2
  • 改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local
1.设置ssh程序的日志设备为自定义设备
# vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility LOCAL5

2.设置自定义设备日志文件存储位置
# vim /etc/rsyslog.conf
local5.* /var/log/local5.local

3.重启生效
# systemctl restart sshd
# systemctl restart rsyslog

4.尝试登录,触发日志

5.观察日志,理解自定义日志设备
# ll /var/log/local5.local
-rw-------. 1 root root 201 /var/log/local5.local
cat /var/log/local5.local
  • 案例3
    • 使用logger程序写日志到指定的设备及级别

在这里插入图片描述

logger "run....."
logger -p emerg "run......"
logger -p authpriv.info "run......"
  • 案例4
    • rsyslog远程管理日志

1.修改server1的rsyslog.conf配置文件,打开tcp\udp监听端口

[root@server1 ~]#vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

2.重启rsyslog,检查端口是否在监听

[root@server1 ~]#systemctl restart rsyslog
[root@server1 ~]#yum install net-tools -y
[root@server1 ~]#netstat -ntup | grep 514
tcp   0 0 0.0.0.0:514  0.0.0.0:*  LISTEN 1342/rsyslogd
tcp6  0 0 :::514       :::*       LISTEN 1342/rsyslogd
udp   0 0 0.0.0.0:514  0.0.0.0:*         1342/rsyslogd
udp6  0 0 :::514       :::*              1342/rsyslogd

3.修改server2的ssh配置文件,将日志发送到local0中,并重启sshd

[root@server2 ~]#vim /etc/ssh/sshd_config
SyslogFacility LOCAL0
[root@server2 ~]#systemctl restart sshd

4.修改server2的rsyslog.conf,并重启rsyslog

[root@server2 ~]# vim /etc/rsyslog.conf
local0.*                     @192.168.80.193
[root@server2 ~]# systemctl restart rsyslog.service

5.最后使用tailf在server1上监听server2的日志

在这里插入图片描述

logrotate日志轮转

注:针对任何日志文件(rsyslog日志、Nginx访问或错误日志)

logrotate(轮转,日志切割)

  • 如果没有日志轮转,日志文件会越来越大
  • 将丢弃系统中最旧的日志文件,以节省空间
  • logrotate本事不是系统守护进程,它是通过计划任务crond每天执行
[root@localhost ~]#cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status
/etc/logrotate.conf
# 日志轮转状态/var/lib/logrotate/logrotate.status
# 日志轮转规则按照/etc/logrotate.conf中来
[root@localhost ~]#ls /etc/logrotate.conf /etc/logrotate.d/
/etc/logrotate.conf
/etc/logrotate.d/:
bootlog chrony syslog wpa_supplicant yum
  • 主配置文件
[root@localhost ~]#vim /etc/logrotate.conf
weekly # 一周轮转一次
rotate 4 # 保留4份日志,也就是说,如果进行了5次日志轮替,就会删除第一个备份日志文件
create # 主动创建新的日志文件
dateext # 使用日期来作为文件名的后缀
#compress # 每次轮转需不需要进行压缩
include /etc/logrotate.d # 导入其他应用的日志轮转规则
include /etc/logrotate.d # 导入其他应用的日志轮转规则
/var/log/wtmp { # 以下参数仅对此目录有效,对该日志文件设置轮转的方法
    monthly # 一个月轮转一次
    create 0664 root utmp # 轮转后创建新文件,并设置权限
    minsize 1M # 最小达到1M才会轮转
    rotate 1
}
/var/log/btmp {
    missingok # 丢失不提醒
    monthly
    create 0600 root utmp
    rotate 1
}

参数:

monthly日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty如果日志文件为空,轮替不会进行。
sharedscripts以下脚本只执行一次
create 644 root root以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
size大小日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k
minsize大小日志轮替的最小值,也就是日志一定要达到这个最小值才会进程轮转,否则就算达到时间也不轮替
  • 举例
http自己有自己预先写好的轮替,不过我们可以把他移走,自己写一个
[root@localhost ~]#cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    #以下脚本只执行一次
    delaycompress
    postrotate
    #在日志轮替结束之后,执行以下脚本
    /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    #重载apache服务
    endscript
    #脚本结束
}
[root@localhost ~]#mv /etc/logrotate.d/httpd ~
[root@localhost ~]#vim /etc/logrotate.conf
"/var/log/httpd/access_log" /var/log/httpd/error_log {
#日志轮替的是/var/log/httpd/中RPM包默认安装的apache正确访问日志和错误日志
    rotate 5
    #轮替5次
    mail www@my.org
    #把信息发送到指定邮箱
    size 100k
    #日志大于100KB时才进行日志轮替,不再按照时间轮替
    create 644 root root
    sharedscripts
    #以下脚本只执行一次
    postrotate
    #在日志轮替结束之后,执行以下脚本
    	/usr/bin/killall -HUP httpd
    #重启apache服务
    endscript
    #脚本结束
}
不过改完要记得去手动执行一下/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf这个命令,这个是每天他会自己去定时任务启动轮替的,执行一次就切割一次
[root@localhost ~]#cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status
/etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
  • 33
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值