1、Linux 系统日志

日志重要吗?必须的,没有日志我们怎么知道系统状况?没有日志如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测,还可以实时的监测系统状态,监测和追踪侵入者等等。 我们常查看的日志文件为/var/log/message, 它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中。另外其他信息,比如某个人的身份切换为root以及用户自定义安装的软件(apache)的日志也会在这里列出。

输入命令 ls /var/log/messages,回车,见下图, 接着使用命令 less !$ 来查看一下,见下图, 可以看到日志里面记录了各种各样的信息。按字母“q”即可退出。通常,/var/log/messages 是在做故障诊断时首先要查看的文件。那你肯定会说了,这么多日志都记录到这个文件中,那如果服务器上有很多服务岂不是这个文件很快就会写的很大。现在来看一下日志文件的大小,输入命令 du -sh !$,回车,见下图, 3.5M,比想象中小太多了。这是因为系统有一个日志轮询的机制,每星期切换一个日志,变成message.xxxxxxxx, message.xxxxxxxx, ... messages.xxxxxxxx 连同 messages 一共有5个这样的日志文件。这里的xxxxxxxx就是按照日期的格式生成的文件,这是通过 logrotate 工具的控制来实现的,它的配置文件是 /etc/logrotate.conf 如果没有特殊需求请不要修改这个配置文件。 接着来看一下配置文件 /etc/logrotate.conf,使用 cat 命令查看,见下图, 上面写着,可以使用命令 man logrotate,查看更详细的信息。接下来就显示每隔星期切割1次,总共切割4次,相当于保留1个月的意思,切割完就会创建一个新的文件,后缀用日期,文件可以压缩。还有一个配置文件 /etc/logrotate.d,后面还有每个月切割一次的文件 /var/log/wtmp 和 /var/log/btmp ,都只保存一个文件,创建的时候还设置了文件权限、属主和属组。 接下来,输入命令 ls /etc/logrotate.d 查看文件,回车,见下图, /var/log/messages是由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/messages,所以这个服务不要停。syslogd服务的配置文件为/etc/syslog.conf这个文件定义了日志的级别,具体详细的东西不再阐述,因为若没有特殊需求是不需要修改这个配置文件的,请使用 man syslog.conf 获得更多关于它的信息。

关于配置文件,就这么多内容,想要详细了解的,可以参考 https://my.oschina.net/u/2000675/blog/908189 。

除了关注/var/log/messages外,还应该多关注一下 dmesg 这个命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的。输入 dmesg,直接回车,见下图, 内容非常多,仅截取最后一屏。显示的是系统硬件相关的日志,它保存在内存中,可以使用命令 dmesg -c 清空掉,见下图, 这只是屏幕清空,系统重启之后还会有的。接着查看日志文件,ls /var/log/dmesg,见下图, 这个一个系统启动时的日志,和 /var/log/messages 这个文件毫无联系。输入 less /var/log/dmesg,回车,见下图, 内容太多,还是截取一屏。 接着讲解 last 命令,直接输入 last ,回车,见下图, last 命令用来查看登录 Linux 历史信息,从左至右依次为账户名称、登录终端、登录客户端ip、登录日期及时长。last 命令输出的信息实际上是读取了二进制日志文件 /var/log/wtmp, 只是这个文件不能直接使用 cat, vim, head, tail 等工具查看。 与 last 对应的命令是 lastb,直接回车,见下图, 用来查看登录失败的用户,对应的二进制日志文件是 /var/log/btmp,与 /var/log/wtmp 类似。 另外一个和登陆信息有关的日志文件为/var/log/secure, 该日志文件记录验证和授权等方面的信息,比如ssh登陆系统成功或者失败,都会把相关信息记录在这个日志里。输入命令 less /var/log/secure,回车,见下图, 以后在日常的管理工作中要养成多看日志的习惯,尤其是一些应用软件的日志,比如apache, mysql, php等常用的软件,看它们的日志(错误日志)可以帮助我们排查问题以及监控它们的运行状况是否良好。

2、screen 工具

有时候,我们也许会有这样的需求,要执行一个命令或者脚本,但是需要几个小时甚至几天。这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险。下面就介绍两种方法来避免这样的问题发生。

使用 nohup

把任务丢到后台去,再加一个日志的输出,虽然没有输出到屏幕上,输出到日志里也是可以的。使用命令 nohup command &,其中 command 是日志的意思。 直接加一个 ‘&’ 虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上 nohup 就没有问题了,nohup 的作用就是不挂断地运行命令。 这个命令虽然可以保证运行不中断,但是不能实时查看任务输出的东西。

使用 screen

screen 工具可以填补 nohup 工具的缺点。简单来说,screen 是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen 中有会话的概念,用户可以在一个 screen 会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个真实的 SSH 连接窗口那样。下面介绍screen的一个简单应用。 需要先安装一下,输入命令 yum install -y screen,回车,见下图, 安装完成之后,直接输入 screen ,回车,见下图, 这就进入了一个 screen 窗口,就相当于虚拟终端。使用 w 命令是看不出来的 。现在运行一个命令 vmstat 1,这是一个不断运行的命令,回车,见下图, 使用命令 ctrl a + d,可以把这个 screen 窗口丢到后台去。ctrl a 是同时按住的,d 后面再按。然后就回到原来的界面,见下图, 第一个红色框框的内容显示了刚才后台运行的 screen 窗口,ID 是3847。回到刚才的 screen 窗口,使用命令 screen -r 3847,回车即可,见下图, 停止命令使用 ctrl + c,不想要这个 screen 窗口,输入 exit 回车或按住 ctrl+d,即可终止。 然后下图中就可以看到 screen is terminating,意思是 screen 终止。接着使用命令 screen -ls 查看,就看不到 screen 运行了。 也可以同时使用多个 screen 窗口,具体操作见下图, 输入 screen 回车,然后再使用 ctrl a + d 退出 screen,连续操作3次,创建3个 screen 窗口。使用 screen -ls 也可以看到3个窗口。进入其中一个,使用命令 screen -r ID号就可以。这边还有一个问题,3个窗口的除了 ID 不一样,其他信息都是一样,如果记混了怎么办呢?有一个参数 S(大写)可以解决这个问题,重命名 screen 窗口。输入命令 screen -S "test_screen",回车,见下图, 直接进入第一个 screen 窗口,输入内容 sleep 100,不回车,为了等会区分。然后使用 ctrl a + d 退出来。接着使用命令 screen -ls 查看,见下图, 可以看到一个重命名为 test_screen 的 screen 窗口,之后进入的时候,screen -r 后面可以加 4050,也可以加 test_screen,回车进入后,就能看到刚才输入的 sleep 100。这边不再图片显示了。