计划任务与日志

发布时间 2023-12-09 09:24:56作者: 小小万里


[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
  • 日志的轮转(切割) lgrotate
  • 通常不是由用户定义
  • 文件的位置
[root@localhost ~]# vim /etc/crontab    # 默认没有定义任何计划任务
[root@localhost ~]# ls /etc/cron.d      # 定义的计划任务每个小时会执行
0hourly  sysstat
[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/cron crond、at进程产生的日志
tail /var/log/dmesg 和系统启动相关
tail /var/log/audit/audit.log 系统审计日志
tail /var/log/yum.log yum
tail /var/log/mysqld.log MySQL
tail /var/log/xferlog 访问FTP服务器相关
w 当前登录的用户 /var/log/wtmp
last 最近登录的用户 /var/log/btmp
lastlog 所有用户的登录情况 /var/log/lastlog

案例1:统计登录失败top5

[root@localhost ~]# grep 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c |sort -k1 -n -r |head -5
    779 hadoop
    501 test
    261 183.240.132.21
    224 user
     21 195.54.160.183

案例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

案例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_CRON cron 和 at
LOG_DAEMON 后台进程
LOG_FTP ftp进程
LOG_KERN 内核信息
LOG_LOCAL0 through LOG_LOCAL7 用户自定义设备
LOG_LPR 打印机子系统
LOG_MAIL 邮件系统
LOG_NEWS 新闻子系统
LOG_SYSLOG syslogd自身产生的日志
级别(日志重要级别)解释
LOG_EMERG 紧急,致命,服务无法继续运行,如配置文件丢失
LOG_ALERT 报警,需要立即处理,如磁盘空间使用95%
LOG_CRIT 致命行为
LOG_ERR 错误行为
LOG_WARNING 警告信息
LOG_NOTICE 普通
LOG_INFO 标准信息
LOG_DEBUG 调试信息,排错才开,一般不建议使用
  • 案例1
  • 将authpriv设备日志记录到/var/log/auth.log
  • 案例2
  • 改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local
  • 案例3
  • 使用logger程序写日志到指定的设备及级别
logger "run....."
logger -p emerg "run......"
logger -p authpriv.info "run......"

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份日志
create      # 主动创建新的日志文件
dateext     # 使用日期来作为文件名的后缀
#compress   # 每次轮转需不需要进行压缩
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
}