Linux下的计划任务和日志管理
一:实验环境:
1:虚拟机
2:两个linux系统
二:实验目标
1:at 定制单次执行的计划任务
2:cron定制周期性计划任务
3:配置脚本实现周期性任务
4:配置公司内网服务器每天自动开关机
5:Linux系统日志记录规律
6:自定义日志记录方式
7:配置远程收集日志服务器
三:实验步骤
1):at 定制单次执行的计划任务
第一块
at 定制单次执行的计划任务
前提:服务:atd 必须开启
#查询atd是否运行,只有运行,才能工作。
[root@localhost ~]# /etc/init.d/atd status
atd (pid 2410) 正在运行...
#如果要是atd没有运行的话,就执行start命令。进行激活。
[root@localhost ~]# /etc/init.d/atd start
实例:
[root@localhost ~]# date #查看当前时间
2015年 07月 21日星期二 08:32:32 CST
[root@localhost ~]# at 08:34 #设定时间
at> echo `date`> /tmp/date.txt #在8点34分的时候,在/tmp下建立date.txt文件,切显示“date”时间。
at> <EOT> #按下Ctrl+D 结束
job 1 at 2015-07-21 08:34 #在8:34
查询:
[root@localhost ~]# date
2015年 07月 21日星期二 08:34:21 CST
[root@localhost ~]# ls /tmp/date.txt
/tmp/date.txt
[root@localhost ~]# cat !$
cat /tmp/date.txt
2015年 07月 21日星期二 08:34:00 CST
#在8.34分的时候在/tmp/date.txt下出现时间“2015年 07月 21日星期二 08:34:00 CST
”
拓展:
第二块
执行的计划任务也可以这样写
#at 08:34 2015-7-21
#at now+10min
例子1
[root@localhost ~]# date
2015年 07月 21日星期二 08:50:21 CST
[root@localhost ~]# at 8:51 2015-7-21 #创建任务
at> echo abcd > /tmp/a.txt ##在8:51分的时候,在/tmp下建立a.txt文件 ,并在文件中输入abcd
at> <EOT>
job 3 at 2015-07-21 08:51 #“job”工作,任务,指在2015年7月21日的8点51分下执行任务3
[root@localhost ~]# ls /tmp/a.txt #查看在/tmp下是否创建了/a.txt文件
/tmp/a.txt #创建了a.txt的文件
[root@localhost ~]# cat !$ #查看创建的文件里是否输入了“abcd”的内容。
cat /tmp/a.txt
abcd
例子2
[root@localhost ~]# date
2015年 07月 21日星期二 09:01:36 CST
[root@localhost ~]# at now+3min
at> echo abcde > /tmp/b.txt
at> <EOT>
job 4 at 2015-07-21 09:05
[root@localhost ~]# at –l #查看任务列表
4 2015-07-2109:05 a root #在2015-07-21 09:05时候有一个四号任务
[root@localhost ~]# ls /tmp/b.txt
/tmp/b.txt
[root@localhost ~]# cat !$
cat /tmp/b.txt
abcde
第三块
执行成功的at计划任务会在这个目录下成生一个可执行的脚本文件:
[root@localhost ~]# ll/var/spool/at/*
-rwx------ 1root root 3842 Feb 3 20:45 /var/spool/at/a00002016a5170
-rwx------ 1root root 3842 Feb 3 20:45 /var/spool/at/a000030169e127
#用vim+/var/spool/at/a00002016a5170是可以进入这个任务的,并且可以看到这个任务的内容。
at任务删除:
atrm at序列号
[root@localhost ~]#atrm 4
#这个时候任务列表会将4号任务取消,切在/var哪里的脚本也会消失。
2):cron定制周期性计划任务
第一块
周期性计划任务:
配置文件:
[root@localhost ~]# vim /etc/crontab
# 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
服务:crond
[root@localhost ~]# /etc/init.d/crondstatus
crond (pid 2399) 正在运行...
[root@localhost ~]# chkconfig --list crond #查看是否开机启动
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@localhost ~]# chkconfig crond on #如果不是开机启动,执行这条命令就会自动开启
第二块
针对用户级别的计划任务:对于root用户:
命令:
#crontab –e 创建一个计划任务
#crontab –l 显示
#crontab –r 删除计划任务
1:#crontab –e 创建一个计划任务
[root@localhost ~]# date
2015年 07月 21日星期二 09:54:33 CST
[root@localhost ~]# crontab -e
55 09 * * * echo `date` >/tmp/date.txt
[root@localhost ~]# ls /tmp/date.txt
/tmp/date.txt
[root@localhost ~]# cat !$
cat /tmp/date.txt
Tue Jul 21 09:55:02 CST 2015
3):配置脚本实现周期性任务
第一块
例: 特殊写法:
#9,18,22这几天的3点1分,开始执行备份脚本
1 3 9,18,22 * * /usr/bin/back.sh #在默认的每个月中的9.18.22号这三天的3点1分都进行备份,备份到/usr/bin/back.sh下
#每月9-18日,这几天的3点1分执行
1 3 9-18 * * /usr/bin/back.sh
#每5分钟,执行一次
*/5 * * * * /usr/bin/back.sh
例:
每天删除5天前的文件
1 1 * ** find /home/log/ -type f -mtime +5-exec rm {} \;
第二块
使用root身份,给其它普通用户指定crontab:
语法:crontab-u USERNAME -e/-l/-r
例子:
[root@localhost ~]# ls /home #查看普通用户
laoyu
[root@localhost ~]# crontab -u laoyu –e #给普通用户创建一个任务
1 * * * * touch /tmp/a.txt #让其每分钟都在/tmp下创建一个文件
[root@localhost ~]# crontab -u laoyu –l #对创建的任务进行显示
1 * * * * touch /tmp/a.txt
[root@localhost ~]# crontab -u laoyu –r #对于创建的任务进行删除,这里的删除是所有的,不能够一条一条的删除
[root@localhost ~]# crontab -u laoyu –l #再次查看,不在存有任务
no crontab for laoyu
第三块
实例:
在“1 3 9-18 ** /usr/bin/back.sh”命令执行之后的某一天里3点钟之前突然停电,在3点10分之后才来电,那么在这个时候正好错过了备份的时间,数据又很重要,不能让数据丢失,那这个时候怎么办呢?
Anacron:2:
cron用控制循环执行例行性工作。如果我要设定机器每早8点进行备份用服务。除非我机器保证在8点这个时间点不会关机,如果关机了,cron中的脚本,在下次开机将不会被执行。anacron并没有取代cron的意思,anacron用于,机器重启后,会侦测停机期间,有没有cron没有执行的计划任务,如果有,会立即,执行一下没有执行的任务。
4):实战,配置服务器定时开机
BIOS
SVN,
通过键盘上的箭头选择PowerManagement Setup,就进入电源管理设置了。
1. 通过回车进入这个设置后,选择Wake Up Event Setup,回车选择Press Enter。
2. 最后,在这个界面内继续找到Resume By RTC Alarm,回车选择一下。
3. 继续回车选择,将Disabied 更改为Enabled,然后继续回车确定。然后再继续设置时间点和日期。
4. 然后选择日期,并且选择你需要电脑每天需要在几点开机,当然,要保证你的主板时间是准确的。
5. 假如你需要每天都定时开机,就选择EveryDay,,你如果想要在每天6:45开机,就通过数字键输入06:45:00,最后,一般按F10 进行保存,重启电脑后生效!
5):Linux系统日志记录规律
第一块
日志管理
目录:
/var/log
常用的系统日志如下:
核心启动日志:/var/log/dmesg
系统报错或重启服务等日志:/var/log/messages
邮件系统日志:/var/log/maillog
cron(定制任务日志)日志:
/var/log/cron #计划日志执行成功与否,在这个文件中看
/var/log/secure #验证系统用户登录
文件 /var/log/wtmp 记录所有的登入和登出。
例:
[root@xuegod63~]# last #查看所有登录过系统的用户和IP,会看到一系列的日志
[root@xuegod63~]# > /var/log/wtmp #清空日志
[root@xuegod63~]# last #这时在查看的时候就不在看到一系列的日志了
文件 /var/log/lastlog 记录每個用戶最后的登入信息。
例:
[root@xuegod63~]# lastlog
Username Port From Latest
root tty1 Tue Dec 18 22:22:39 +08002012
文件 /var/log/btmp 记录错误的登入尝试。
[root@xuegod63~]# lastb #查看谁在尝试登录系统
root tty1 Tue Dec 18 09:45 - 09:45 (00:00)
[root@xuegod63~]# ll /var/log/btmp
-rw-------.1 root utmp 384 Dec 18 2012 /var/log/btmp
#当你使用这个命令查看的时候发现文件的容量过大,那么就说明有人想要登陆你的系统
测试:
[root@xuegod63~]# ssh 192.168.1.63
#远程连接1.63,且故意输错密码。
[root@xuegod63~]# lastb
mk ssh:notty xuegod63.cn Tue Feb 3 21:28 - 21:28 (00:00)
mk ssh:notty xuegod63.cn Tue Feb 3 21:28 - 21:28 (00:00)
mk ssh:notty xuegod63.cn Tue Feb 3 21:28 - 21:28 (00:00)
root ssh:notty xuegod63.cn Tue Feb 3 21:28 - 21:28 (00:00)
再次查看的时候,发现就会有用户登陆错误的日志提示
6):自定义日志记录方式
第一块
日志记录方式: 先分类,然后每个类中再分级别
主要7种日志分类(FACILITY):
authpriv 安全认证相关
cron at和cron定时相关
daemon 后台进程相关
kern 内核产生
lpr 打印系统产生
mail 邮件系统相关
syslog 日志服务本身
news 新闻系统 (和BBS差不多,新闻组)
uucp uucp系统产生 。Unix-to-Unix Copy(UNIX至UNIX的拷贝),Unix系统的一项功能,允许计算机之间以存储-转发方式交换e-mail和消息。在Internet兴起之前是Unix系统之间连网的主要方式。
local0到local7 #共8个类型,系统保留的:8个系统日志类型,给其它程序使用。或用户 自定义用
第二块
8个日志级别:以下排列,由轻到重
级别(PRIOROTY):
debug 排错信息。开发人
info 正常信息
notice 稍微要注意的
warn 警告
err(error) 错误
crit(critical) 关键的错误;批评,比err更为严重
alert 警报警惕
emerg(emergency) 紧急,突发事件
7):记录日志的位置
第一块
日志服务:
1).rhel5:
服务名称:syslog
配置文件:
#vim/etc/syslog.conf
2).RHEL6:rsyslog
配置文件:
[root@localhost~]# vim /etc/rsyslog.conf #进入配置文件显示内容如下:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#“*”表示所有级别 “info”表示info级别以上的所有日志都记录在/var/log/messages下。但是info以上级别中的mail,authpriv等级别的日志不再记录在/messages日志中。
例:
1.kern.* 内核类型的所级别日志
2*.info;mail.none;news.none;authpriv.none;cron.none:由于mail, news, authpriv, cron 等类别产生的讯息较多,因此在/var/log/messages 里面不记录这些项目。除此其他讯息都写入 /var/log/messages中。所以messages 文件很重要
3.authpriv.* 认证方面的讯息均写入 /var/log/secure 档案;
4.mail.*:邮件方面的讯息则均写入 /var/log/maillog 档案;
5.cron.*:例行性工作排程均写入 /var/log/cron 档案;
6.local7.*:将本机开机时应该显示到屏幕的讯息写入到 /var/log/boot.log 档案中;
第二块
/etc/rsyslog.conf 中日志输入规则:
例:
. :代表『比后面还要高的等级都被记录下来』的意思,
例如: mail.info 代表只要是mail 类型的信息,而且该信息等级高于 info (包括info 本身)时,就会被记录下来的意思。
.= :代表所需要的等级就是后面接的等级而已,其他的都不要!
.! :代表不等于,亦即是除了该等级外的其他等级都记录。
举例:
cron.none 对于cron类型日志不记录任何信息
cron.=err 对于cron类型日志只记录err级别的信息
cron.err 对于cron类型日志记录大于err级别的信息
cron.!err 对于cron类型日志不记录err级别的信息,其他级别都记录。
[root@localhost~]# vim /etc/rsyslog.conf #进入配置文件显示内容如下
#Log all the mail messages in one place.
mail.* -/var/log/maillog
问:
在上面的关于 mail 的记录中,在记录的档案 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?
答:
由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内,这样将有利于减少对磁盘读写的次数,减少IO读写开销。另外,由于讯息是暂存在内存内,因此若不正常关机导致登录信息未写入到文档中,可能会造成部分数据的遗失。
第三块
服务重启和开机启动:
#service rsyslogrestart;
#chkconfig rsyslog on
日志的存储格式(怎么看日志):
DATA TIME HOSTNAME APP(NAME) [PID]: MESSAGES
说明:
DATA TIME:日志记录的日期和时间
HOSTNAME APP(NAME) [PID]:什么机器,什么程序(程序的PID):
[root@localhost ~]# vim/var/log/messages
May 29 23:19:33localhost kernel: Initializing cgroup subsys cpuset
#在5月29号23点19分33秒 ,主机名为localhost,APP的名字为内核,发布了以下信息
第四块
例:sshd+rsyslog练习(sshd单独记录一个叫sshd.log的日志文件):
local0
修改配置文件:
[root@localhost ~]# vim/etc/ssh/sshd_config修改:
SyslogFacility AUTHPRIV
为:
#SyslogFacility local0
重启:
[root@localhost~]# service sshd restart
停止 sshd: [确定]
正在启动 sshd: [确定]
修改配置文件:
[root@localhost ~]# vim /etc/rsyslog.conf #在最后添加一行
local0.* /var/log/sshd.log
重启:
[root@localhost ~]# service rsyslog restart
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]
[root@localhost ~]# ls /var/log/sshd.log #查看,在/var下产生了sshd.log日志,
/var/log/sshd.log
[root@localhost ~]# cat !$ #打开查看的时候,里面根本就没任何内容
cat /var/log/sshd.log
没有内容,重启一下服务看看。
[root@localhost ~]# service sshd restart
停止 sshd: [确定]
正在启动 sshd: [确定]
[root@localhost ~]# cat /var/log/sshd.log #再次查看到 时候我们就看到产生一些日志
Jul 22 10:54:38 localhost sshd[31703]:Received signal 15; terminating.
Jul 22 10:54:38 localhost sshd[31780]: Serverlistening on 0.0.0.0 port 22.
Jul 22 10:54:38 localhost sshd[31780]: Serverlistening on :: port 22.
第五块
如何防止日志被黑客删除呢?
[root@localhost~]# chattr +a /var/log/sshd.log # 给这条日志添加一条新的命令 “+a”
[root@localhost~]# rm -rf !$ #删除实验,可以看到这个时候的日志是无法删除的
rm-rf /var/log/sshd.log
rm:无法删除"/var/log/sshd.log": 不允许的操作
[root@xuegod63~]# lsattr /var/log/sshd.log
-----a-------e-/var/log/sshd.log
[root@xuegod63~]# tail -f /var/log/sshd.log #下面远程连接一下,可以看到日志
[root@xuegod63~]# ssh 192.168.1.63
加入了这个属性后,你的 /var/log/messages 登录档从此就仅能被增加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数后,才能被删除移喔!
第六块 -- 了解
日志回滚:
logrotate(日志回滚过程: 创建新文件、改名旧文件。)
配置文件:
#vim/etc/logrotate.conf
#vim /etc/logrotate.d/*
[root@localhost ~]# vim /etc/logrotate.conf |
weekly <==预设每个礼拜对日志档进行一次 rotate 的工作
rotate 4<==保留几个日志文档呢?预设是保留四个!
create <== 回滚日志后,创建一个新的空文件来存储新的数据。
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
说明:
/var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数
monthly <==每个月一次,取代每周!
minsize 1M <==档案容量一定要超过 1M 后才进行rotate (略过时间参数)
create 0664 root utmp<==设定新建文件的权限 、所有者、用户组
rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。 }
8):配置远程收集日志服务器
1. 配置SERVER端(接收端):xuegod63 服务端。 xuegod64做客户端
[root@bogon ~]# vim/etc/rsyslog.conf
将:
# Provides TCP syslogreception
#$ModLoad imtcp.so
#$InputTCPServerRun 514
改为:
# Provides TCP syslogreception
$ModLoad imtcp.so
$InputTCPServerRun 514
[root@bogon ~]# servicersyslog restart
[root@xuegod63 log]#netstat -anutp | grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 7426/rsyslogd
tcp 0 0 :::514 :::* LISTEN 7426/rsyslogd
2. 配置CLIENT端(发送端):
# vim /etc/rsyslog.conf #在最后添加
*.* @@192.168.1.64:514
[root@xuegod64 ~]#/etc/init.d/rsyslog restart
查看:
[root@xuegod63 log]#tail -f /var/log/messages
本文出自 “末班车” 博客,谢绝转载!
原文地址:http://blxueyuan.blog.51cto.com/9673381/1679772