计划任务
日志、
搭建远程日志管理
计划任务
at 只能执行一次
语法:
at time(时间)
服务: atd 必须开启
[[email protected] ~]# /etc/init.d/atd status #查看atd服务状态
atd (pid 2108) is running...
创建计划任务
[[email protected] ~]# at 16:07
at> echo `date` > /tmp/date.txt
at> <EOT> #ctrl+d 结束输入
job 1 at 2015-04-17 16:07
[[email protected] ~]# at 16:10 2015-04-17 指定具体时间
at> echo `date` >/tmp/date.txt
at> <EOT>
job 2 at 2015-04-17 16:10
[[email protected] ~]# at now+2min #2分钟后执行
at> echo `date` > /tmp/date.txt
at> <EOT>
job 3 at 2015-04-17 16:13
可以查看相应的/tmp/date.txt
at查询
[[email protected] ~]# at -l
6 2015-04-17 16:19 a root
5 2015-04-17 16:25 a root
执行成功的at计划任务会在这个目录下成生一个可执行的脚本文件:
[[email protected] ~]# ll /var/spool/at/
total 8
-rwx------ 1 root root 4094 Apr 17 16:16 a00005016b7ab9
at任务删除
atrm at序列号
[[email protected] ~]# atrm 5
at只能执行一次而不能周期性的执行
周期性的计划任务
crontab
配置文件:
[[email protected] ~]# vim /etc/crontab
服务:
crond
[[email protected] ~]# /etc/init.d/crond status #查看服务状态
crond (pid 2097) is running...
You have new mail in /var/spool/mail/root
查看服务是否开机启动,设置开机启动
[[email protected] ~]# chkconfig --list crond #查看
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[[email protected] ~]# chkconfig crond on #设置开机启动
了解:对于系统级别的计划任务,需要执行的命令和脚本都放在这里:
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
[[email protected] ~]# cat /var/spool/cron/root 计划任务池spool/cron
* * * * * echo $(date) >>/tmp/time.txt
[[email protected] ~]# echo "* * * * * touch /tmp/test.txt" >>/var/spool/cron/root
[[email protected] ~]# cat /etc/cron.deny 黑名单
新建个白名单 vim /etc/cron.allow
一般不会两个同时出现
针对用户级别的计划任务
root用户
命令:
crontab -e 创建一个计划任务
crontab -l 显示计划任务
crontab -r 删除计划任务
crontab -e的写法
分 时 日 月 周 谁做后面的事情 命令
minute:表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
实例:
[[email protected] ~]# crontab -e
56 16 * * * echo `date`>/tmp/date.txt
[[email protected] ~]# cat /tmp/date.txt
Fri Apr 17 16:56:01 CST 2015
特殊写法:
9,18,22这几天的3点1分,开始执行备份脚本
1 3 9,18,22 * * /usr/bin/back.sh
每月9-18日,这几天,3:00执行
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 {} \;
一条命令添加计划任务
echo "* * * * * /bin/echo xx" >/var/spool/cron/username
使用root身份,给其它普通用户指定crontab:
语法:crontab -u USERNAME -e/-l/-r
[[email protected] ~]# crontab -u pagoda -e #创建
[[email protected] ~]# crontab -u pagoda -l #查看
1 * * * * touch /tmp/a.txt
[[email protected] ~]# crontab -u pagoda -r #删除
那么root自己的计划任务怎么清理
[[email protected] ~]# crontab -r
疑问:如果设置好了计划任务在任务的前1分钟服务器突然断电,过了一会
之后又来电,计划任务还能继续执行吗
答:如果断电cron中的脚本,在下次开机将不会被执行
解决:anacron
anacron并没有取代cron的意思,
anacron用于,机器重启后,会侦测停机期间,
有没有cron没有执行的计划任务,如果有,会立即,执行一下没有执行的任务
扩展:服务器可以在来电后自启,也可以设置定时开机
定时开机肯定是在bios中设置
Delet,F2进入bios设置
一般在电源管理中:Power Management Setup
唤醒功能:Wake Up Event Setup
启用后选择好时间
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
日志管理
日志在/var/log/下面
一:常见系统日志
核心启动日志:/var/log/dmesg
系统报错或重启服务等日志:/var/log/messages
邮件系统日志:/var/log/maillog
cron(定制任务日志)日志:/var/log/cron #计划日志执行成功与否,在这个文件中看
验证系统用户登录:/var/log/secure
记录所有的登入和登出:/var/log/wtmp
[[email protected] ~]# last #查看所有登录过系统的用户和IP
[[email protected] ~]# > /var/log/wtmp #使用空覆盖wtmp,清除所有登陆日志
[[email protected] ~]# last
wtmp begins Fri Apr 17 17:42:46 2015
记录每个用戶最后的登入信息:/var/log/lastlog
[[email protected] ~]# lastlog
Username Port From Latest
root pts/0 192.168.8.2 Tue Apr 14 20:13:23 +0800 2015
记录错误的登入尝试:/var/log/btmp
[[email protected] ~]# lastb ##查看谁,尝试登录系统
root tty1 :0 Mon Apr 13 20:09 - 20:09 (00:00)
root tty1 :0 Sun Apr 12 19:46 - 19:46 (00:00)
root tty6 :0 Fri Apr 10 07:27 - 07:27 (00:00)
btmp begins Fri Apr 10 07:27:16 2015
[[email protected] ~]# ll /var/log/btmp #当发现这个文件过大时,可能有人尝试暴力破解ssh
-rw-------. 1 root utmp 1152 Apr 13 20:09 /var/log/btmp
设置Linux用户连续N次输入错误密码进行登陆时,自动锁定
一、在字符终端下,实现某一用户连续错误登陆N次后,就锁定该用户X分钟。
执行 vi /etc/pam.d/login
在#%PAM-1.0 下新起一行,加入
auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10
如果不限制root用户,则可以写成
auth required pam_tally2.so deny=3 unlock_time=5
诠释:
1.even_deny_root 也限制root用户;
2.deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
3.unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
4.root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
不同的pam版本,设置可能有所不同
二、在图形登陆界面下,实现某一用户连续错误登陆N次后,就锁定该用户X分钟
执行vim /etc/pam.d/gnome-screensaver
在#%PAM-1.0 下 下新起一行,加入
auth required pam_tally2.so even_deny_root deny=3 unlock_time=5 root_unlock_time=10
如果不限制root用户,则可以写成
auth required pam_tally2.so deny=3 unlock_time=5
三、也可以直接在 system-auth 文件中直接添加这些命令,修改完成后,
凡是调用 system-auth 文件的服务,都会生效。因为有自动解锁时间
,所以,不用担心全部限制后,会出现永远无法登陆的“尴尬”情况。
备注:
可以使用 pam_tally2 -r -u username 命令,手动清除某用户记录次数
二:日志记录方式
规则:先分类,然后再在每个类中分级别
分类:有7种日志分类
*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个日志级别:以下排列,由轻到重
debug 排错信息。开发人
info 正常信息
notice 稍微要注意的
warn 警告
err(error) 错误
crit(critical) 关键的错误
alert 警报警惕
emerg(emergency) 紧急,突发事件
日志服务:
服务名称:
RHEL5:syslog
RHEL6:rsyslog
配置文件
RHEL5:/etc/syslog.conf
RHEL6:/etc/rsyslog.conf
了解配置文件(vim /etc/rsyslog.conf)
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 档案中;
服务重启和开机启动:
#service rsyslog restart;
#chkconfig rsyslog on
自定义日志输入规则
/etc/rsyslog.conf 中日志输入规则:
. :代表『比后面还要高的等级都被记录下来』的意思
.= :代表所需要的等级就是后面接的等级而已, 其他的都不要!
.! :代表不等于, 亦即是除了该等级外的其他等级都记录。
如:
cron.none 对于cron类型日志不记录任何信息
cron.=err 对于cron类型日志只记录err级别的信息
cron.err 对于cron类型日志记录大于err级别的信息
cron.!err 对于cron类型日志不记录err级别的信息,其他级别都记录。
日志记录位置
1、日志的相对路径:通常就是放在 /var/log 中
2、 存在远程日志服务器上
3、有时日志会直接弹出在屏幕上。类似于wall命令。
wall--send a message to everybody’s terminal.给所有的终端发送消息
解读 /etc/rsyslog.conf中的第48行
mail.* -/var/log/maillog
记录的档案 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?
由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中 (buffer) ,
等到数据量够大了才一次性的将所有数据都填入磁盘内
这样将有利于减少对磁盘读写的次数,减少IO读写开销
另外,由于讯息是暂存在内存内,因此若不正常关机导致登录信息未写入到文档中,可能会造成部分数据的遗失\
怎么查看日志-->日志的存储格式
DATA TIME HOSTNAME APP (NAME) [PID]: MESSAGES
DATA TIME:日志记录的日期和时间
HOSTNAME APP (NAME) [PID]:什么机器,什么程序(程序的PID):
例:sshd+rsyslog练习(sshd单独记录一个叫sshd.log的日志文件):
修改配置文件:#vim /etc/ssh/sshd_config
修改:
#SyslogFacility AUTHPRIV
为:
SyslogFacility local0
重启:#service sshd restart
修改配置文件:#vim /etc/rsyslog.conf #在最后添加一行 指定ssh相关日志保存到sshd.log
local0.* /var/log/sshd.log
重启:#service rsyslog restart
[[email protected] ~]# service sshd restart #先重启rsyslog服务,这样后面重启sshd会产生些日志
[[email protected] ~]# cat /var/log/sshd.log
Apr 18 00:22:11 pagoda63 sshd[3626]: Received signal 15; terminating.
Apr 18 00:22:12 pagoda63 sshd[3669]: Server listening on 0.0.0.0 port 22.
Apr 18 00:22:12 pagoda63 sshd[3669]: Server listening on :: port 22.
日志产生了那我们该怎么防止日志被恶意删除呢?
用到我们的特殊权限了
[[email protected] ~]# chattr +a /var/log/sshd.log #只允许追加
[[email protected] ~]# lsattr /var/log/sshd.log #查看
-----a-------e- /var/log/sshd.log
加入了这个属性后,你的 /var/log/messages 登录档从此就仅能被增加
而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数后
才能被删除移喔
我们可以测试下
[[email protected] ~]# tail -f /var/log/sshd.log 实时查看日志
我在64号机远程登陆63,产生些日志
Apr 18 00:30:31 pagoda63 sshd[3687]: Accepted password for root from 192.168.8.64 port 54555 ssh2
Apr 18 00:30:34 pagoda63 sshd[3687]: Received disconnect from 192.168.8.64: 11: disconnected by user
日志滚动
logrotate(日志回滚过程: 创建新文件、改名旧文件。)
配置文件及相关目录
#vim /etc/logrotate.conf
#vim /etc/logrotate.d/*
logrotate -f 强制滚动
解读[[email protected] ~]# 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 保留而已。 }
日志滚动与日志防删除
日志滚动会将日志分段存储,分段了的话,加了+a,+i还有用吗?
+a,+i权限后不允许日志滚动
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
实战:
配置远程日志服务器,实现日志集中管理:
环境准备:
server服务端:192.168.8.63 pagoda63 接收
client客户端:192.168.8.64 pagoda64 发送
64的日志发送给63
配置服务端:
[[email protected] ~]# vim /etc/rsyslog.conf
去掉前面的注释#,即启用它,修改后如下
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
[[email protected] ~]# service rsyslog restart #重启服务
[[email protected] ~]# netstat -antup | grep 514 #检查端口号514的进程是否通信
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 3783/rsyslogd
tcp 0 0 :::514 :::* LISTEN 3783/rsyslogd
配置客户端
[[email protected] ~]# vim /etc/rsyslog.conf
在末尾添加一行:
*.* @@192.168.8.63:514
上面的声明告诉rsyslog守护进程,
将系统上各个设备的各种日志消息路由到远程rsyslog服务器(192.168.8.63)的UDP端口514
如果出于某种原因,你需要更为可靠的协议,如TCP,
而rsyslog服务器也被配置为监听TCP连接,
你必须在远程主机的IP地址前添加一个额外的@字符,像下面这样:
*.* @@192.168.8.63:514
注意,你也可以将rsyslog服务器的IP地址替换成它的主机名(FQDN)。
[[email protected] ~]# service rsyslog restart
查看:
[[email protected] ~]# tail -f /var/log/messages
Apr 18 01:22:14 pagoda63 sshd[3669]: Received signal 15; terminating.
Apr 18 01:22:14 pagoda63 sshd[3888]: Server listening on 0.0.0.0 port 22.
Apr 18 01:22:14 pagoda63 sshd[3888]: Server listening on :: port 22.
对多台客户端发送的日志分类,64的日志在64下,65的在65下,以hostname命名
新建个配置文件
vim /etc/rsyslog.d/remote.conf
写入内容:
:fromhost-ip, isequal, "192.168.1.64" /var/log/xuegod64.log
:fromhost-ip, isequal, "192.168.1.64" ~