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

原文地址:https://www.cnblogs.com/xiaogan/p/5805210.html