zoukankan      html  css  js  c++  java
  • 1-17-Linux中计划任务与日志的管理

    本节所讲内容:

    1-1 Linux中的计划任务

    1-1-1 at计划任务的使用

    1-1-2 cron 计划任务的使用

    1-1 Linux服务器的日志管理

    1-1-1 日志的种类和记录的方式

    1-1-2 实战-自定义ssh服务的日志存储

    1-1-3 扩展-日志的回滚

    1-1-4 实战-搭建rsyslog远程日志服务器

    ====================================================

    计划任务:在某个时段自动执行某个任务

    Linux 系统中有两条指令用于设置计划任务,at、cron

    at计划任务:只执行一次,然后就没有然后了!!!!

    Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ... #使用计时器(timespec)来执行计划任务
           at [-V] [-q x] [-f file] [-mMlbv] -t time #在某个时间执行计划任务
           at -c job ...
           atq [-V] [-q x]
           at [ -rd ] job ...
           atrm [-V] job ...

           at –b

    -m      Send mail to the user when the job has completed even if there was no output.#当计划任务完成(即使这个命令没有输出)时,向用户发送邮件

    -M      Never send mail to the user. #不发送通知

    -f file Reads the job from file rather than standard input. #从文件中读取计划任务,而不是从标准输入中读取

    -t time run the job at time, given in the format [[CC]YY]MMDDhhmm[.ss] #在time这个时间执行计划任务,格式为 [[CC]YY]MMDDhhmm[.ss]

    -l      Is an alias for atq. #atq 命令的别名

    -r      Is an alias for atrm. #atrm命令的别名

    -d      Is an alias for atrm.#

    -b      is an alias for batch. #

    -v      Shows the time the job will be executed before reading the job.

            Times displayed will be in the format "Thu Feb 20 14:50:00 1997".

    -c      cats the jobs listed on the command line to standard output.

    配置文件:

    /var/spool/at
    /var/spool/at/spool
    /proc/loadavg
    /var/run/utmp
    /etc/at.allow
    /etc/at.deny

    服务:atd

    开启atd服务

    [root@localhost ~]# systemctl status atd
    [root@localhost ~]# systemctl restart atd
    [root@localhost ~]# systemctl enable atd

    image

    实战-使用at创建计划任务

    [root@localhost ~]# date  #查询当前系统时间
    Tue Aug 23 23:34:26 CST 2016
    [root@localhost ~]# at 23:36  #设置计划任务,在23:36分执行
    at> mkdir /root/1607  #输入要执行的命令
    at> <EOT> #输入ctrl+d退出
    job 6 at Tue Aug 23 23:36:00 2016
    [root@localhost ~]# at –l
    #查看当前的计划任务(执行一次的)
    [root@localhost ~]# atq #同上
    [root@localhost ~]# at 20:00 2017-10-1 #计划任务的特殊格式(在未来的某一天)
    [root@localhost ~]# at now +10min #计划任务的特殊格式(在10min后)

    对于系统来说 :计划任务 就是在某个特定的时刻 执行一个脚本文件

    创建成功的at计划任务会在/var/spool/at/目录下成生一个可执行的脚本文件

    /var/spool/at/*

    查看/var/spool/at/*

    每一个脚本都对应一个at计划任务

    删除at计划任务:

    atrm 命令

    atrm + 计划任务的编号

    [root@localhost ~]# atrm 3 #删除编号 是3的计划任务

    [root@localhost ~]# ls /var/spool/at/ #设置成功的计划任务,会在这个目录下生成一个文件
    [root@localhost ~]# rm -rf /var/spool/at/a00007017f36d0
      #删除其中一个文件,在查看,会发现,计划任务已取消
    [root@localhost ~]# at -r 8 
    #删除计划任务命令格式
    [root@localhost ~]# atrm 8 #删除计划任务的另一个命令格式

    at -l信息解析:

    10    Tue Aug 23 23:50:00 2016 a root

    10 –> 任务编号为10  Tue Aug 23 23:50:00 2016 --->任务执行时间(2016年8月23日星期二的23:50分) root--->执行者
    image

    总结:at计划任务执行一次,下次就不能再次执行

    ====================================================

    crond是cron执行计划任务的服务,crond命令会定期检查是否有要执行的工作,如果有,便会自动执行该工作。

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

    linux任务调度的工作主要分为以下两类:

    *系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存. 例如/tmp 临时目录

    *个人执行的工作:某个用户定期要做的工作,由每个用户自行设置。

    启动服务

    [root@localhost ~]# systemctl status crond #查询服务状态
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Tue 2016-08-23 22:43:37 CST; 1h 10min ago
    Main PID: 1250 (crond)
       CGroup: /system.slice/crond.service
               └─1250 /usr/sbin/crond -n

    Aug 23 22:43:37 localhost.localdomain systemd[1]: Started Command Scheduler.
    Aug 23 22:43:37 localhost.localdomain systemd[1]: Starting Command Scheduler...
    Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (RANDOM_DELAY will be scale....)
    Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (running with inotify support)
    Hint: Some lines were ellipsized, use -l to show in full.
    [root@localhost ~]# systemctl restart crond #crond服务重启
    [root@localhost ~]# systemctl enable crond #crond设置开机自启

    cron命令参数介绍: (个人用户级别)

    crontab的参数:

    crontab -u #指定某个用户的cron服务;

    crontab -l  #列出cron服务的详细内容;

    crontab -r #删除cron服务;

    crontab -e #编辑cron服务;

    Usage:
    crontab [options] file
    crontab [options]
    crontab -n [hostname]

    Options:
     -u <user>  define user
    -e         edit user's crontab
    -l         list user's crontab
    -r         delete user's crontab
    -i         prompt before deleting
    -n <host>  set host in cluster to run users' crontabs
    -c         get host in cluster to run users' crontabs
    -s         selinux context
    -x <mask>  enable debugging

    Default operation is replace, per 1003.2

    例如:

    crontab -u root -l # root查看自己的cron计划任务:

    crontab -u san -r # root想删除san的cron计划任务:

    cron文件语法:

              分     小时    日       月       星期      命令

            0-59   0-23   1-31   1-12     0-6     command   一般一行对应一个任务

    特殊符号的含义:

            "*"代表取值范围内的数字,(任意)

            "/"代表"每",                      20/

            "-"代表从某个数字到某个数字,     6-18

            ","分开几个离散的数字            6,18

    # For details see man 4 crontabs

    # 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

    创建计划任务

    可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件.

    crontab的计划任务内容保存在目录/var/spool/cron下面

    [root@localhost ~]# cd /var/spool/cron/

    [root@localhost cron]# ls

    空的!!!

    编辑计划任务

    [root@localhost cron]# crontab -u root -e

    5 * * * *  mkdir /ro

    再次查看:

    image

    也可以直接在/etc/crontab中添加计划任务

    cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。

    用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务

    编辑/etc/crontab 配置文件 (详解)

    SHELL=/bin/bash #变量的指,指定SHELL环境(次默认为bash shell)
    PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH变量,指定执行的命令的程序路径
    MAILTO=root #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号

    [root@localhost ~]# vim /etc/crontab

    10 0 *   *   *  root mkdir /opt/aaa

    [root@xuegod63 ~]# date

    Thu Aug 25 00:10:07 CST 2016

    [root@localhost ~]# ls /opt/

    aaa  rh

    系统级别的计划任务

    对于系统级别的计划任务,需要执行的命令和脚本都放在这里:
    /etc/cron.*     按两次tab

    [root@localhost ~]# ls /etc/cron

    cron.d/       cron.deny     cron.monthly/ cron.weekly/ 

    cron.daily/   cron.hourly/  crontab      

    目录作用解释:

    cron.d/        #是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。

    cron.deny     #控制用户是否能做计划任务的文件;

    cron.monthly/ #每月执行的脚本;

    cron.weekly/  #每周执行的脚本;

    cron.daily/    #每天执行的脚本;

    cron.hourly/   #每小时执行的脚本;

    crontab     #主配置文件 也可添加任务;

    计划任务案例:

    1. 每天晚上21:30 重启apache

    30 21 * * * /etc/init.d/httpd restart

    2. 每月1、10、22日的4 : 45重启apache。

    45 4 1,10,22 * * /etc/init.d/httpd restart

    3. 每月110日的4 : 45重启apache。

    45 4 1-10 * * /etc/init.d/httpd restart

    4. 周一到周五每天晚上 21:15 寄一封信给 root@xuegod63:

    15 21 * * 1-5  mail -s "hi" root@localhost < /etc/fstab

    [root@localhost ~]# cat /var/spool/mail/root

    image

    anacron

    cron用控制循环执行例行性工作。如果我要设定机器每早8点进行备份用服务。除非我机器保证在8点这个时间点不会关机,如果关机了,cron中的脚本,在下次开机将不会被执行。

    anacron并没有取代cron的意思,anacron用于,机器重启后,会侦测停机期间,有没有cron没有执行的计划任务,如果有,会立即,执行一下没有执行的任务。

    ==============================================================================

    1-2  Linux系统中的日志管理

    1-2-1 日志的管理

    日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。

    日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等

    /var/log 存放日志的位置.

    image

    常用的日志文件如下:

    btmp 纪录失败的纪录
    lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
    messages 从syslog中记录信息(有的链接到syslog文件)

    utmp 纪录当前登录的每个用户
    wtmp 一个用户每次登录进入和退出时间的永久纪录

    /var/log/wtmp 系统登录的情况登入登出

    vim 编辑 是加密的内容

    last 命令查看日志内容

    哪个用户在哪个时间通过哪种方式登录系统的情况

    清空日志文件

    再次使用last查看

    image

    2./var/log/lastlog 最后登录信息

    lastlog 记录所有的用户什么时候登录过系统

    lastlog 和 last的区别

    last 查看IP

    lastlog 查看后门的账号

    3./var/log/btmp 用户登录系统的错误信息

    lastb 查看

    发现是空的

    模拟使用ssh错误的连接本机

    再次查看

    会产生相应的内容

    image

    如果说你发现你的btmp文件变得很大,说明有很大的可能是有人在暴力破解你的主机

    可使用 ll -h 查看文件的大小

    1-2-2 日志的记录方式:

    分类.级别

    日志的种类:

    daemon 后台进程相关

    kern 内核产生的信息

    lpr 打印系统产生的

    authpriv 安全认证

    cron 定时相关

    mail 邮件相关

    syslog 日志服务本身的

    news 新闻系统

    local 0-local 7    8个系统保留的类 供其它的程序使用 /或者是用户自定义

    日志的级别: -

    debug 排错的信息

    info 正常的信息

    notice 注意

    warn 警告

    err 错误

    crit 关键的错误

    alert 警报

    energ 紧急  #系统快崩溃了

    日志服务

    旧版本  rhel服务名称  syslog

    配置文件  /etc/syslog.conf

    rhel6-7

    服务名称  rsyslog

    配置文件 /etc/rsyslog.conf

    编辑配置文件  vim /etc/rsyslog.conf

    #kern.*    内核类型的所有级别日志存放到     /dev/console

    *.info;mail.none;authpriv.none;cron.none                /var/log/messages

    所有的类别 级别是info以上 除了mail,authpriv,cron (产生的日志太多,不易于查看)

    类别.级别

    authpriv.*      认证的信息存放                 /var/log/secure

    mail.*         邮件相关的信息存放  -/var/log/maillog

    cron.*         计划任相关的信息存放            /var/log/cron

    local7.*        开机时显示的信息存放-->             /var/log/boot.log

    在mail.* 的指定文件前面,有个-

    由于邮件的信息比较多,先将数据存储到内存,当达到一定大小,全部写到硬盘.有利于减少I/O进程的开销

    数据存储在内存,如果关机不当会造成数据消失

    日志输入的规则

    . info 高于info级别的信息全部记录到某个文件

    .= 级别 仅记录等于某个级别的日志

    例:.=info 只记录info级别的日志 

    .! 级别 除了某个级别意外,记录所有的级别信息

    例.!err  除了err外 记录所有

    .none 指的是排除某个类别

    =============================================================================

    实战-自定义ssh服务的日志

    1.编辑rsyslog配置文件

    编辑文件 vim /etc/rsyslog.conf

    输入 local 0 .* /var/log/sshd.log #日志的保存路径

    image

    2.定义ssh服务的日志级别

    编辑sshd服务的主配置文件vim /etc/ssh/sshd_config

    /定位查找 关键字Syslog,更改级别是local 0 ,保存退出.

    SyslogFacility local0

    image

    3.生效配置文件

    先重启rsyslog服务(生效配置)

    systemctl restart rsyslog.service

    再重启sshd服务.生成日志

    systemctl restart sshd

    image

    4.验证是否生成日志并查看其中的内容

    查看/var/log 出现 sshd.log

    查看/var/log/sshd.log内容

    image

    时间 主机 服务 进程ID   相关的信息

    如何防止日志被heike删除

    chattr +a /var/log/sshd.log

    lsattr /var/log/sshd.log

    日志的回滚

    在linux下的日志会定期进行回滚,

    控制系统执行日志回滚操作的配置文件主要有

    /etc/logrotate.conf 以及 /etc/logrotate.d/ 这个目录下的明细配置文件。

    日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情

    日积月累 就有几百兆 占用磁盘的空间

    如果你要找出某一条可用信息à海底捞针

    日志回滚原理:当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志.

    实战

    编辑配置文件/etc/logrotate.conf

    image

    weekly : 每周执行回滚

    rotate : 保留4个副本

    create : 创建新的文件存储数据

    单独配置

    /var/log/wtmp {        指定的日志文件

        monthly 

        create 0664 root utmp

            minsize 1M    文件超过1M进行回滚

    rotate 1 回滚产生的副本

    old文件

    image

    ========================================================

    实战配置-日志回滚  在ssh日志的基础上

    编辑配置文件

    [root@localhost ~]# vim /etc/logrotate.conf

    wps3A23.tmp

    创建数据

    [root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10

    [root@localhost ~]# du -sh /var/log/sshd.log

    10M /var/log/sshd.log

    时间设置

    [root@localhost ~]# date -s 2017-01-01

    Sun Jan  1 00:00:00 EST 2017

    生效配置文件

    [root@localhost ~]# logrotate /etc/logrotate.conf

    查看备份效果

    wps3A24.tmp

    再次查看文件的大小 为空

    wps3A25.tmp

    第二种方法 执行logrotate 脚本

    更改时间

    [root@localhost ~]# date -s 2020-02-02

    wps3A26.tmp

    添加数据

    [root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10

    [root@localhost ~]# du -sh /var/log/sshd.log

    10M /var/log/sshd.log

    执行脚本

    [root@localhost ~]# sh /etc/cron.daily/logrotate

    验证效果

    wps3A27.tmp

    =============================================================================

    实战:配置远程日志服务器->实现日志集中的管理

    server localhost(IP 192.168.171.122)

    client xiaogan63.cn(IP 192.168.171.63)

    第一步:server端配置

    编辑 /etc/rsyslog.conf

    image

    UDP—>速度快—>不保证数据的完整

    TCP—>可靠—>完整

    使用TCP的方式

    去除#号注释

    重新启动 rsyslog

    systemctl restart rsyslog

    查看服务监听的状态

    netstat -anlpt| grep 514

    image

    第二步:client端配置:

    先ping一下服务器,看看通不通(关掉防火墙!!!)

    image

    vim/etc/rsyslog.conf

    image

    *.* 所有类别和级别的日志

    @@192.168.171.122:514  服务端的IP:端口

    重启rsyslog 服务

    systemctl restart rsyslog

    第三步:服务端验证

    输入如下命令:

    tail -f /var/log/message  #动态的显示到终端

    image

    client 重启服务

    systemctl restart atd

    服务端显示变化如下:

    image

  • 相关阅读:
    【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页
    【原】无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页
    【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用
    【原】无脑操作:eclipse + maven搭建SSM框架
    【原】无脑操作:eclipse创建maven工程时,如何修改默认JDK版本?
    【原】Java学习笔记031
    【原】Java学习笔记030
    【原】Java学习笔记029
    【原】Java学习笔记028
    【原】Java学习笔记027
  • 原文地址:https://www.cnblogs.com/xiaogan/p/5805210.html
Copyright © 2011-2022 走看看