本节所讲内容:

      at 定制单次执行的计划任务

      cron定制周期性计划任务

      配置脚本实现周期性任务

      配置公司内网服务器每天自动开关机

      Linux系统日志记录规律

      自定义日志记录方式

      配置远程收集日志服务器

 

计划任务:

at # 只能执行一次

语法:

at  时间

服务:atd  必须开启

 

[root@localhost ~]#systemctl status atd

atd.service - Jobspooling tools

   Loaded: loaded (/usr/lib/systemd/system/atd.service;enabled)

   Active: active (running) since Thu2015-12-17 20:24:06 CST; 11min ago

 

[root@localhost ~]#systemctl restart atd                    #重启atd服务

[root@localhost ~]#systemctl enable atd                    #设置atd服务开机自动启动

 

[root@localhost ~]#date

Thu Dec 17 20:37:33 CST2015

[root@localhost ~]# at 20:39

at> echo `date`  > /root/date.txt                 #输入要执行的命令

at> <EOT>                                                     #按ctrl+D结束

job 1 at Thu Dec 1720:39:00 2015

 

也可以这样写

[root@localhost ~]# at 20:002015-12-18

[root@localhost ~]# at  now +10min

 

[root@localhost ~]# at -l

2     Fri Dec 18 20:00:00 2015 a root

3     Thu Dec 17 20:53:00 2015 a root

 

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

[root@localhost ~]# ll /var/spool/at/*

-rwx------  1 root  root   4325 Dec 17 20:43/var/spool/at/a000020170ddb0

-rwx------  1 root  root   4324 Dec 17 20:43/var/spool/at/a000030170d845

 

/var/spool/at/spool:

total 0

 

at任务删除:

atrm  at序列号

[root@localhost ~]#atrm 3

 

周期性计划任务:

配置文件:

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

*     *      *     *     *

分    时    日    月    星

 

[root@localhost ~]#systemctl status crond

crond.service - CommandScheduler

   Loaded: loaded(/usr/lib/systemd/system/crond.service; enabled)

   Active: active (running) since Thu2015-12-17 20:24:06 CST; 30min ago

 

[root@localhost ~]#systemctl restart crond

[root@localhost ~]#systemctl enable crond         #设置开机自动启动

 

解:对于系统级别的计划任务,需要执行的命令和脚本都放在这里:

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

/etc/cron.hourly   /etc/cron.daily   /etc/cron.weekly    /etc/cron.monthly

 

针对用户级别的计划任务:

对于root用户:

命令:

#crontab –e   创建一个计划任务 

#crontab –l    显示

#crontab –r   删除计划任务

 

#crontab –e   #写法

分 时 日 月 星 谁做后面的事情 命令

每个取值范围:

分:0-59

小时:0-23

日:1-31

月:1-12

周:0-7   0 7 都是周日

 

[root@localhost ~]#crontab -e

02  21 *  *   * echo  `date`  > /root/rm.txt

[root@localhost ~]# catrm.txt

Thu Dec 17 21:02:01 CST2015

 

查看计划任务

[root@localhost ~]#crontab -l

02  21 *  *   * echo      `date`  > /root/rm.txt

 

例: 特殊写法:

#每月9,18,22号这几天的凌晨1点1分,执行一个备份脚本

1 1 9,18,22 *  * ./backup.sh

 

#每月9-22号这几天的凌晨1点1分,执行一个备份脚本

1 1 9-22 * *    ./backup.sh

 

#每5分钟,执行一次

*/5  * *  *  *  ./backup.sh

 

使用root身份,给其它普通用户指定crontab:

语法:crontab-u USERNAME  -e/-l/-r

[root@localhost ~]#crontab -u rm -e

0 3 * * *  /root/backup.sh

[root@localhost ~]#crontab -u rm -l

0 3 * * *  /root/backup.sh

 

[root@localhost ~]#crontab -r

[root@localhost ~]#crontab -l

no crontab for root

 

anacron

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

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

 

实战,定时开机

BIOS

进入bios,一般是在开机后出现主板画面是按Delete这个键,部分品牌机可能按F2,F1

1、我的电脑看到上方这个图案按Delete,就可以进入bios设置界面了。然后通过键盘上的箭头选择Power Management Setup,就进入电源管理设置了。

 

通过回车进入这个设置后,选择Wake Up Event Setup,回车选择Press Enter

 

 

最后,在这个界面内继续找到Resume By RTC Alarm,回车选择一下。

继续回车选择,将Disabied 更改为Enabled,然后继续回车确定。然后再继续设置时间点和日期。

然后选择日期,并且选择你需要电脑每天需要在几点开机,当然,要保证你的主板时间是准确的。

 

假如你需要每天都定时开机,就选择Every Day,,你如果想要在每天6:45开机,就通过数字键输入06:45:00,最后,一般按F10 进行保存,重启电脑后生效!

 

日志管理

/var/log

常用的系统日志如下:

核心启动日志:/var/log/dmesg

系统报错或重启服务等日志:/var/log/messages
邮件系统日志:/var/log/maillog

cron(定制任务日志)日志:/var/log/cron   #计划日志执行成功与否,在这个文件中看

var/log/secure  #验证系统用户登录

 

文件/var/log/wtmp 记录所有的登入和登出

 

[root@localhost ~]#>/var/log/wtmp

[root@localhost ~]#last

 

wtmp begins Thu Dec 1721:44:40 2015

 

文件 /var/log/lastlog 记录每個用戶最后的登入信息。

[root@localhost ~]#lastlog

Username         Port     From             Latest

root             pts/2   192.168.1.101    Thu Dec 1721:00:38 +0800 2015

 

文件 /var/log/btmp 记录错误的登入尝试。

[root@localhost ~]#lastb

mk       ssh:notty    192.168.1.69     Thu Dec 17 21:48 - 21:48  (00:00)   

mk       ssh:notty    192.168.1.69     Thu Dec 17 21:48 - 21:48  (00:00)   

 

测试:

[root@xuegod69 ~]#ssh  mk@192.168.1.68

mk@192.168.1.68'spassword:

 

[root@localhost ~]# ll-h /var/log/btmp

-rw-------. 1 root utmp1.2K Dec 17 21:48 /var/log/btmp

#如果btmp文件特别大,说明有人在暴力破解你的服务器

 

2.日志记录方式: 先分类,然后每个类中再分级别

 

主要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)         关键的错误

alert                 警报警惕

emerg(emergency)      紧急,突发事件

 

日志服务:

1).rhel5

服务名称:syslog

配置文件:

#vim /etc/syslog.conf

 

2) .RHEL6:rsyslog

配置文件:

#vim /etc/rsyslog.conf

 

3).RHEL7:rsyslog

配置文件:

#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 档案中;

 

 

/etc/rsyslog.conf  中日志输入规则:

 

例:

.  :代表『比后面还要高的等级都被记录下来』的意思,

例如: mail.info 代表只要是 mail 类型的信息,而且该信息等级高于 info (包括 info 本身)时,就会被记录下来的意思。

.=  :代表所需要的等级就是后面接的等级而已, 其他的都不要!

.!  :代表不等于,亦即是除了该等级外的其他等级都记录。

 

举例:

cron.none   对于cron类型日志不记录任何信息

cron.=err   对于cron类型日志只记录err级别的信息

cron.err    对于cron类型日志记录大于err级别的信息

cron.!err   对于cron类型日志不记录err级别的信息,其他级别都记录。

 

记录日志的位置:

1、日志的相对路径:通常就是放在 /var/log中

2、 存在远程日志服务器上

3、有时日志会直接弹出在屏幕上。类似于wall命令。

 

扩展:

wall命令介绍:

       wall -- send a message to everybody’sterminal.

 

[root@localhost ~]#wall Today is nice day!!!

wall Today is nicedayvim /etc/rsyslog.conf !

 

Broadcast message fromroot@localhost.localdomain (pts/0) (Thu Dec 17 22:10:28 2015):

 

Today is nice dayvim/etc/rsyslog.conf !

 

这样所有登录Linux的虚端的用户都会收到这个信息。

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

mail.*                                                 -/var/log/maillog

 

在上面的第四行关于 mail 的记录中,在记录的档案 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?

由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内这样将有利于减少对磁盘读写的次数减少IO读写开销。另外,由于讯息是暂存在内存内,因此若不正常关机导致登录信息未写入到文档中,可能会造成部分数据的遗失。

 

自定义sshd服务的日志

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

local0.*                                                /var/log/sshd.log

[root@localhost ~]#systemctl restart rsyslog.service

 

配置sshd服务的配置文件

[root@localhost ~]# vim /etc/ssh/sshd_config

SyslogFacility local0

[root@localhost ~]#systemctl restart sshd

 

[root@localhost ~]# ls /var/log/sshd.log

/var/log/sshd.log

[root@localhost ~]# cat!$

cat /var/log/sshd.log

Dec 17 22:18:38localhost sshd[35876]: Server listening on 0.0.0.0 port 22.

Dec 17 22:18:38localhost sshd[35876]: Server listening on :: port 22.

 

日志查看方式

时间    主机    进程ID        执行的操作

如何防止日志被***删除呢?

[root@localhost ~]#chattr +a /var/log/sshd.log

[root@localhost ~]#lsattr /var/log/sshd.log

-----a----------/var/log/sshd.log

 

加入了这个属性后,你的 /var/log/messages 登录档从此就仅能被增加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数后,才能被删除移!

 

5.日志回滚:

logrotate(日志回滚过程: 创建新文件、改名旧文件。)

配置文件:

#vim/etc/logrotate.conf

[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 保留而已。 }

 

配置远程日志服务器,实现日志集中管理:

1.配置SERVER端(接收端):  xuegod68服务端服务端。 xuegod69做客户端

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

将:

# Provides TCP syslogreception

#$ModLoad imtcp.so

#$InputTCPServerRun 514

改为:

# Provides TCP syslogreception

$ModLoad imtcp.so  
$InputTCPServerRun 514

[root@localhost ~]#systemctl restart rsyslog.service

[root@localhost ~]#netstat -anptu | grep 514

tcp        0     0 0.0.0.0:514       0.0.0.0:*               LISTEN      36217/rsyslogd     

tcp6       0      0 :::514               :::*                  LISTEN      36217/rsyslogd  

 

2. 配置CLIENT端(发送端):

[root@xuegod69 ~]#vim  /etc/rsyslog.conf

*.*     @@192.168.1.68:514

[root@xuegod69 ~]#systemctl restart rsyslog.service

 

在服务端查看

[root@localhost ~]#tail -f /var/log/messages

 

在客户端执行

[root@xuegod69 ~]#systemctl restart NetworkManager

 

最终日志内容在服务端进行显示

 

 

学习过程中如果问题,请留言。更多内容请加:

学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589