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
实战-使用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 root10 –> 任务编号为10 Tue Aug 23 23:50:00 2016 --->任务执行时间(2016年8月23日星期二的23:50分) root--->执行者
总结: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
再次查看:
也可以直接在/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. 每月1到10日的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
anacron
cron用控制循环执行例行性工作。如果我要设定机器每早8点进行备份用服务。除非我机器保证在8点这个时间点不会关机,如果关机了,cron中的脚本,在下次开机将不会被执行。
anacron并没有取代cron的意思,anacron用于,机器重启后,会侦测停机期间,有没有cron没有执行的计划任务,如果有,会立即,执行一下没有执行的任务。
==============================================================================
1-2 Linux系统中的日志管理
1-2-1 日志的管理
日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等
/var/log 存放日志的位置.
常用的日志文件如下:
btmp 纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)
utmp 纪录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久纪录
/var/log/wtmp 系统登录的情况登入登出
vim 编辑 是加密的内容
last 命令查看日志内容
哪个用户在哪个时间通过哪种方式登录系统的情况
清空日志文件
再次使用last查看
2./var/log/lastlog 最后登录信息
lastlog 记录所有的用户什么时候登录过系统
lastlog 和 last的区别
last 查看IP
lastlog 查看后门的账号
3./var/log/btmp 用户登录系统的错误信息
lastb 查看
发现是空的
模拟使用ssh错误的连接本机
再次查看
会产生相应的内容
如果说你发现你的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 紧急 #系统快崩溃了
日志服务
旧版本 rhel5 服务名称 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 #日志的保存路径
2.定义ssh服务的日志级别
编辑sshd服务的主配置文件vim /etc/ssh/sshd_config
/定位查找 关键字Syslog,更改级别是local 0 ,保存退出.
SyslogFacility local0
3.生效配置文件
先重启rsyslog服务(生效配置)
systemctl restart rsyslog.service
再重启sshd服务.生成日志
systemctl restart sshd
4.验证是否生成日志并查看其中的内容
查看/var/log 出现 sshd.log
查看/var/log/sshd.log内容
时间 主机 服务 进程ID 相关的信息
如何防止日志被heike删除
chattr +a /var/log/sshd.log
lsattr /var/log/sshd.log
日志的回滚
在linux下的日志会定期进行回滚,
控制系统执行日志回滚操作的配置文件主要有
/etc/logrotate.conf 以及 /etc/logrotate.d/ 这个目录下的明细配置文件。
日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情
日积月累 就有几百兆 占用磁盘的空间
如果你要找出某一条可用信息à海底捞针
日志回滚原理:当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志.
实战
编辑配置文件/etc/logrotate.conf
weekly : 每周执行回滚
rotate : 保留4个副本
create : 创建新的文件存储数据
单独配置
/var/log/wtmp { 指定的日志文件
monthly
create 0664 root utmp
minsize 1M 文件超过1M进行回滚
rotate 1 回滚产生的副本
old文件
========================================================
实战配置-日志回滚 在ssh日志的基础上
编辑配置文件
[root@localhost ~]# vim /etc/logrotate.conf
创建数据
[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
查看备份效果
再次查看文件的大小 为空
第二种方法 执行logrotate 脚本
更改时间
[root@localhost ~]# date -s 2020-02-02
添加数据
[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
验证效果
=============================================================================
实战:配置远程日志服务器->实现日志集中的管理
server localhost(IP 192.168.171.122)
client xiaogan63.cn(IP 192.168.171.63)
第一步:server端配置
编辑 /etc/rsyslog.conf
UDP—>速度快—>不保证数据的完整
TCP—>可靠—>完整
使用TCP的方式
去除#号注释
重新启动 rsyslog
systemctl restart rsyslog
查看服务监听的状态
netstat -anlpt| grep 514
第二步:client端配置:
先ping一下服务器,看看通不通(关掉防火墙!!!)
vim/etc/rsyslog.conf
*.* 所有类别和级别的日志
@@192.168.171.122:514 服务端的IP:端口
重启rsyslog 服务
systemctl restart rsyslog
第三步:服务端验证
输入如下命令:
tail -f /var/log/message #动态的显示到终端
client 重启服务
systemctl restart atd
服务端显示变化如下: