首页 > 代码库 > 命令6 centos 7
命令6 centos 7
---------------------------------------------------------------------------------------------------------- 在 runlevel 的对应上,大概仅有 runlevel 1, 3, 5 有对应到 systemd 的某些 target 类型而已,没有全部对应; ---------------------------------------------------------------------------------------------------------- 全部的 systemd 都用 systemctl 这个管理程序管理,而 systemctl 支持的语法有限制,不像 ---------------------------------------------------------------------------------------------------------- /etc/init.d/daemon 就是纯脚本可以自定义参数,systemctl 不可自定义参数。; ---------------------------------------------------------------------------------------------------------- 如果某个服务启动是管理员自己手动执行启动,而不是使用 systemctl 去启动的 (例如你自己手动输入 ---------------------------------------------------------------------------------------------------------- crond 以启动 crond 服务),那么 systemd 将无法侦测到该服务,而无法进一步管理。 ---------------------------------------------------------------------------------------------------------- systemd 启动过程中,无法与管理员透过 standard input 传入讯息!因此,自行撰写 systemd 的启动设定时, ---------------------------------------------------------------------------------------------------------- 务必要取消互动机制~(连透过启动时传进的标准输入讯息也要避免!) ---------------------------------------------------------------------------------------------------------- 不过,光是同步启动服务脚本这个功能就可以节省你很多开机的时间~同时 systemd 还有很多特殊 ---------------------------------------------------------------------------------------------------------- 的服务类型 (type) 可以提供更多有趣的功能!确实值得学一学~ 而且 CentOS 7 已经用了 systemd ---------------------------------------------------------------------------------------------------------- 了!想不学也不行啊~哈哈哈!好~既然要学,首先就得要针对 systemd 管理的 unit 来了解一下。 ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 扩展名 主要服务功能 .service 一般服务类型 (service unit):主要是系统服务,包括服务器本身所需要的本地服务以及网络服务都是!比较经常被使用 到的服务大多是这种类型! 所以,这也是最常见的类型了! ---------------------------------------------------------------------------------------------------------- .socket 内部程序数据交换的插槽服务 (socket unit):主要是 IPC (Inter-processcommunication) 的传输讯息插槽文件(socket file) 功能。 这种类型的服务通常在监控讯息传递的插槽文件,当有透过此插槽文件传递讯息来说要链接服务时,就 依据当时的状态将该用户的要求传送到对应的 daemon, 若 daemon 尚未启动,则启动该daemon 后再传送用户的要求。使用 socket 类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间 (因为比较没有这么常用嘛!)。一般用于本地服务比较多,例如我们的图形界面很多的软件都是透过 socket 来进行本机程序数据交换的行为。 (这与早期的xinetd 这个 super daemon 有部份的相似喔!) ---------------------------------------------------------------------------------------------------------- .target 执行环境类型 (target unit):其实是一群 unit 的集合,例如上面表格中谈到的 multi-user.target 其实 就是一堆服务的集合~也就是说, 选择执行 multi-user.target 就是执行一堆其他 .service 或/ 及 .socket 之类的服务就是了! ---------------------------------------------------------------------------------------------------------- .mount .automount 文件系统挂载相关的服务 (automount unit / mount unit):例如来自网络的自动挂载、NFS 文件系统 挂载等与文件系统相关性较高的程序管理。 ---------------------------------------------------------------------------------------------------------- .path 侦测特定文件或目录类型 (path unit):某些服务需要侦测某些特定的目录来提供队列服务,例如最常见的打印服务,就是透过侦测打印队列目录来启动打印功能! 这时就得要 .path 的服务类型支持了! ---------------------------------------------------------------------------------------------------------- .timer 循环执行的服务 (timer unit):这个东西有点类似 anacrontab 喔!不过是由 systemd 主动提供的, 比 anacrontab 更加有弹性 ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl [command] [unit] 格式# systemctl start atd.service 1 |1 command 主要有: 1 |1 start :立刻启动后面接的 unit 1 |1 stop :立刻关闭后面接的 unit 1 |1 restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思 1 |1 reload :不关闭后面接的 unit 的情况下,重载配置文件,让设定生效 1 |1 enable :设定下次开机时,后面接的 unit 会被启动 1 |1 disable :设定下次开机时,后面接的 unit 不会被启动 1 |1 status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机预设执行否、登录等信息等! 1 |1 is-active :目前有没有正在运作中 1 |1 is-enable :开机时有没有预设要启用这个 unit 1 |1 范例一:看看目前 atd 这个服务的状态为何? 1 |1 [root@study ~]# ---------------------------------------------------------------------------------------------------------- ? active (running):正有一只或多只程序正在系统中执行的意思,举例来说,正在执行中的 vsftpd 就是这种 模式。 ? active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 举例来说,开机或者 是挂载时才会进行一次的 quotaon 功能,就是这种模式! quotaon 不须一直执行~只须执行一次之后,就 交给文件系统去自行处理啰!通常用 bash shell 写的小型服务,大多是属于这种类型 (无须常驻内存)。 ? active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。举例来说,打印的队列相关服务 就是这种状态! 虽然正在启动中,不过,也需要真的有队列进来 (打印作业) 这样他才会继续唤醒打印机 服务来进行下一步打印的功能。 ? inactive:这个服务目前没有运作的意思。 既然 daemon 目前的状态就有这么多种了,那么 daemon 的预设状态有没有可能除了 enable/disable 之外,还有其他的情况呢?当然有! ? enabled:这个 daemon 将在开机时被执行 ? disabled:这个 daemon 在开机时不会被执行 ? static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled 的服务来唤醒 (相依属 性的服务) ? mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可透过 systemctl unmask 方 式改回原本状态 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# netstat -tlunp | grep cups tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1208/cupsd tcp6 0 0 ::1:631 :::* LISTEN 1208/cupsd ---------------------------------------------------------------------------------------------------------- netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
语法选项
netstat [选项]
-a或--all:显示所有连线中的Socket; -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; -c或--continuous:持续列出网络状态; -C或--cache:显示路由器配置的快取信息; -e或--extend:显示网络其他相关信息; -F或--fib:显示FIB; -g或--groups:显示多重广播功能群组组员名单; -h或--help:在线帮助; -i或--interfaces:显示网络界面信息表单; -l或--listening:显示监控中的服务器的Socket; -M或--masquerade:显示伪装的网络连线; -n或--numeric:直接使用ip地址,而不通过域名服务器; -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; -o或--timers:显示计时器; -p或--programs:显示正在使用Socket的程序识别码和程序名称; -r或--route:显示Routing Table; -s或--statistice:显示网络工作信息统计表; -t或--tcp:显示TCP传输协议的连线状况; -u或--udp:显示UDP传输协议的连线状况; -v或--verbose:显示指令执行过程; -V或--version:显示版本信息; -w或--raw:显示RAW传输协议的连线状况; -x或--unix:此参数的效果和指定"-A unix"参数相同; --ip或--inet:此参数的效果和指定"-A inet"参数相同。 ---------------------------------------------------------------------------------------------------------- # 1. 保持刚刚的状态,关闭 cups.service,启动 cups.socket,然后注销 cups.servcie [root@study ~]# systemctl stop cups.service ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl mask cups.service ---------------------------------------------------------------------------------------------------------- ln -s ‘/dev/null‘ ‘/etc/systemd/system/cups.service‘ # 喔耶~其实这个 mask 注销的动作,只是让启动的脚本变成空的装置而已! ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl status cups.service ---------------------------------------------------------------------------------------------------------- cups.service Loaded: masked (/dev/null) Active: inactive (dead) since Tue 2015-08-11 23:14:16 CST; 52s ago ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl start cups.service ---------------------------------------------------------------------------------------------------------- Failed to issue method call: Unit cups.service is masked. # 再也无法唤醒! 上面的范例你可以仔细推敲一下~原来整个启动的脚本配置文件被连结到 /dev/null 这个空装置~因 此,无论如何你是再也无法启动这个 cups.service 了! 透过这个 mask 功能,你就可以不必管其他 相依服务可能会启动到这个想要关闭的服务了!虽然是非正规,不过很有效! ^_^ 那如何取消注销呢?当然就是 unmask 即可啊! ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl unmask cups.service ---------------------------------------------------------------------------------------------------------- rm ‘/etc/systemd/system/cups.service‘ ---------------------------------------------------------------------------------------------------------- [root@study ~]# systemctl status cups.service ---------------------------------------------------------------------------------------------------------- cups.service - CUPS Printing Service Loaded: loaded (/usr/lib/systemd/system/cups.service; disabled) Active: inactive (dead) since Tue 2015-08-11 23:14:16 CST; 4min 35s ago # 好佳在有恢复正常! ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 范例一:列出系统上面有启动的 unit [root@study ~]# systemctl ---------------------------------------------------------------------------------------------------------- # 列出的项目中,主要的意义是: # UNIT :项目的名称,包括各个 unit 的类别 (看扩展名) # LOAD :开机时是否会被加载,默认 systemctl 显示的是有加载的项目而已喔! # ACTIVE :目前的状态,须与后续的 SUB 搭配!就是我们用 systemctl status 观察时,active 的项目! # DESCRIPTION :详细描述啰 # cups 比较有趣,因为刚刚被我们玩过,所以 ACTIVE 竟然是 failed 的喔!被玩死了! ^_^ # 另外,systemctl 都不加参数,其实预设就是 list-units 的意思! ---------------------------------------------------------------------------------------------------------- 列出所有已经安装的 unit 有哪些? [root@study ~]# systemctl list- - unit- - files ---------------------------------------------------------------------------------------------------------- 查看service 这种类别的 daemon ,而且不论是否已经启动, ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-units --type=service --all ---------------------------------------------------------------------------------------------------------- 列出跟操作界面比较有 关的 target 项目 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-units --type=target --all ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl get-default 观察是否真为图形模式 graphical.target 为图形模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl set-default multi-user.target ---------------------------------------------------------------------------------------------------------- Removed symlink /etc/systemd/system/default.target. 删除图形模式的配置文件 Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target. 创建文本模式的配置文件 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl get-default 查看在什么模式 multi-user.target 为文本模式 ---------------------------------------------------------------------------------------------------------- 在不重新启动的情况下,将目前的操作环境改为纯文本模式,关掉图形界面 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl isolate multi-user.target ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl isolate graphical.target 重新取得图形界面 注:暂时获取图形模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl set-default graphical.target 更改配置文件为 默认为图形模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl poweroff 系统关机 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl reboot 重新启动 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl suspend 进入暂停模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl rescue 强制进入救援模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl emergency 强制进入紧急救援模式 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-dependencies mkdir --reverse ---------------------------------------------------------------------------------------------------------- 谈到 systemd 的时候就有谈到相依性的问题克服,那么,如何追踪某一个 unit 的 相依性呢? 举例来说好了,我们怎么知道 graphical.target 会用到 multi-user.target 呢?那 graphical.target 底下还有哪些东西呢? ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-dependencies su --reverse su.service --reverse :反向追踪谁使用这个 unit 的意思! ---------------------------------------------------------------------------------------------------------- 列出目前的 target 环境下,用到什么特别的 unit ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl get-default graphical.target ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-dependencies 列出目前的 target 环境下,用到什么特别的 unit ---------------------------------------------------------------------------------------------------------- 因为我们前一小节的练习将默认的操作模式变成 multi-user.target 了,因此这边使用 list-dependencies 时,所列出的 default.target 其实是 multi-user.target 的内容啦!根据线条联机的流程,我们也能够知 道, multi-user.target 其实还会用到 basic.target + getty.target + remote-fs.target 三大项目, 而 basic.target 又用到了 sockets.target + sysinit.target + timers.target... 等一堆~所以啰,从这边就能够清 楚的查询到每种 target 模式底下还有的相依模式。 那么如果要查出谁会用到 multi-user.target 呢? 就这么作! ---------------------------------------------------------------------------------------------------------- reverse 本来就是反向的意思,所以加上这个选项,代表『谁还会用到我的服务』的意思~所以看得 出来, multi-user.target 主要是被 graphical.target 所使用喔! 好~那再来,graphical.target 又使用 了多少的服务呢?可以这样看: ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-dependencies graphical.target graphical.target ● ├─accounts-daemon.service ● ├─gdm.service ● ├─network.service ● ├─rtkit-daemon.service ● ├─systemd-readahead-collect.service ● ├─systemd-readahead-replay.service ---------------------------------------------------------------------------------------------------------- 所以可以看得出来,graphical.target 就是在 multi-user.target 底下再加上 accounts-daemon, gdm, network, rtkit-deamon, systemd-update-utmp-runlevel 等服务而已! 这样会看了吗?了解 daemon 之间 的相关性也是很重要的喔!出问题时,可以找到正确的服务相依流程! ---------------------------------------------------------------------------------------------------------- 比较重要的 systemd 启动脚本配置文件在 /usr/lib/systemd/system/, /etc/systemd/system/ 目录下,那还有哪些目录跟系统的 daemon 运作有关呢? 基本上是这样的: ? /usr/lib/systemd/system/: 使用 CentOS 官方提供的软件安装后,默认的启动脚本配置文件都放在这里,这里的数据尽量不要修改~ 要修改时,请到 /etc/systemd/system 底下修改较佳! ? /run/systemd/system/: 系统执行过程中所产生的服务脚本,这些脚本的优先序要比 /usr/lib/systemd/system/ 高! ? /etc/systemd/system/: 管理员依据主机系统的需求所建立的执行脚本,其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能! 执行优先序又比 /run/systemd/system/ 高喔! ? /etc/sysconfig/*: 几乎所有的服务都会将初始化的一些选项设定写入到这个目录下,举例来说,mandb 所要更新的 man page 索引中,需要加入的参数就写入到此目录下的 man-db 当中喔!而网络的设定则写在 /etc/sysconfig/network-scripts/ 这个目录内。所以,这个目录内的文件也是挺重要的; ? /var/lib/: 一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。举例来说,数据库管理系统 Mariadb 的数 据库默认就是写入 /var/lib/mysql/ 这个目录下啦! ? /run/: 放置了好多 daemon 的暂存档,包括 lock file 以及 PID file 等等。 我们知道 systemd 里头有很多的本机会用到的 socket 服务,里头可能会产生很多的 socket file ~那 你怎么知道这些 socket file 放置在哪里呢? 很简单!还是透过 systemctl 来管理! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-sockets 显示socket file 放置在哪里 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /etc/services 这个文件的内容是以底下的方式来编排的 ---------------------------------------------------------------------------------------------------------- <daemon name> <port/封包协议> <该服务的说明> ---------------------------------------------------------------------------------------------------------- 像上面说的是,第一栏为 daemon 的名称、第二栏为该 daemon 所使用的端口号与网络数据封包协 议, 封包协议主要为可靠联机的 TCP 封包以及较快速但为非面向连接的 UDP 封包。 举个例子说, 那个远程联机机制使用的是 ssh 这个服务,而这个服务的使用的埠号为 22 ---------------------------------------------------------------------------------------------------------- 请特别注意!虽然有的时候你可以藉由修改 /etc/services 来更改一个服务的埠号,不 过并不建议如此做, 因为很有可能会造成一些协议的错误情况!这里特此说明一番呦!(除非你要架设一个地下网 站,否则的话,使用 /etc/services 原先的设定就好啦!) ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# netstat -tlunp 查看网络端口 追踪 ---------------------------------------------------------------------------------------------------------- Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2351/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1126/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1118/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1521/maste udp 0 0 0.0.0.0:5353 0.0.0.0:* 735/avahi-daemon: r ---------------------------------------------------------------------------------------------------------- 如上表所示,我们的系统上至少开了 22, 53, 111, 5353, 36540 这几个埠口~而其中 5353, 36540 是由 avahi-daemon 这个东西所启动的! 接下来我们使用 systemctl 去观察一下,到底有没有 avahi-daemon 为开头的服务呢? ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl list-units --all|grep avahi-daemon 查看到底有没有 avahi-daemon为开头的服务 ---------------------------------------------------------------------------------------------------------- avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack 答案是有 avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket ---------------------------------------------------------------------------------------------------------- 透过追查,知道这个 avahi-daemon 的目的是在局域网络进行类似网芳的搜寻,因此这个服务可以协 助你在区网内随时了解即插即用的装置! 包括笔记本电脑等,只要连上你的区网,你就能够知道谁 进来了。问题是,你可能不要这个协议啊!所以,那就关闭他吧! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl stop avahi-daemon.service Warning: Stopping avahi-daemon.service, but it can still be activated by: avahi-daemon.socket 警告:停止avahi-daemon。服务,但它仍然可以被激活: avahi-daemon.socket ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl stop avahi-daemon.socket sop=停止 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl disable avahi-daemon.socket 更改删除配置文件 为停止 Removed symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket. ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# netstat -tlunp 查看网络端口 追踪 没有了 ---------------------------------------------------------------------------------------------------------- Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2351/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1126/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1118/cupsd ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# cp vsftpd.conf vsftpd2.conf ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# vim vsftpd2.conf ---------------------------------------------------------------------------------------------------------- #listen_port=555 在第一行加入 ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# diff vsftpd.conf vsftpd2.conf 比较两个文件的不同 0a1 > #listen_port=555 ---------------------------------------------------------------------------------------------------------- 开始处理启动脚本的设定 [root@localhost ~]# cd /etc/systemd/system/ ---------------------------------------------------------------------------------------------------------- [root@localhost system]# cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service ---------------------------------------------------------------------------------------------------------- [root@localhost system]# vim vsftpd2.service 更改配置文件 ---------------------------------------------------------------------------------------------------------- [Unit] Description=Vsftpd ftp daemon After=network.target
[Service] Type=forking ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 将vsftpd.conf 更改为vsftpd2.conf
[Install] WantedBy=multi-user.target ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl daemon-reload 重新载入 systemd,扫描新的或有变动的单元 ---------------------------------------------------------------------------------------------------------- 注释:reload为重新加载 restart为重启 ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl list-unit-files --all | grep vsftpd 列出所有启动文件|只显示vsftpd类型的 ---------------------------------------------------------------------------------------------------------- vsftpd.service enabled vsftpd2.service enabled vsftpd@.service disabled vsftpd.target disabled ---------------------------------------------------------------------------------------------------------- systemctl命令 说明 systemctl 列出所有的系统服务 systemctl list-units 列出所有启动unit systemctl list-unit-files 列出所有启动文件 systemctl list-units –type=service –all 列出所有service类型的unit systemctl list-units –type=service –all grep cpu 列出 cpu电源管理机制的服务 systemctl list-units –type=target –all 列出所有target ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl status vsftpd2.service 查看vsftpd2.service的状态 ---------------------------------------------------------------------------------------------------------- ● vsftpd2.service - Vsftpd ftp daemon Loaded: loaded (/etc/systemd/system/vsftpd2.service; enabled; vendor preset: disabled) Active: inactive (dead) ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl status vsftpd.service vsftpd2.service 立刻关闭vsftpd.service并启动vsftpd2.service ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl enable vsftpd.service vsftpd2.service ---------------------------------------------------------------------------------------------------------- 设定下次开机时启用后面的vsftpd2.service脚本 ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl status vsftpd.service vsftpd2.service ---------------------------------------------------------------------------------------------------------- 立刻启用后面的vsftpd2.service ---------------------------------------------------------------------------------------------------------- ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) Active: inactive (dead)
● vsftpd2.service - Vsftpd ftp daemon Loaded: loaded (/etc/systemd/system/vsftpd2.service; enabled; vendor preset: disabled) Active: inactive (dead) ---------------------------------------------------------------------------------------------------------- [root@localhost system]# netstat -tlnp ---------------------------------------------------------------------------------------------------------- -t显示TCP传输协议的连线状况;-l显示监控中的服务器的Socket;-n直接使用ip地址,而不通过域名服务器; -p显示正在使用Socket的程序识别码和程序名称; Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2351/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1126/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1118/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1521/ma ---------------------------------------------------------------------------------------------------------- [root@localhost system]# cat //usr/lib/systemd/system/getty@.service 查看getty@.service的内容 ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl show getty.target ---------------------------------------------------------------------------------------------------------- 那个 show 的指令可以将 getty.target 的默认设定值也取出来显示 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# vim /etc/systemd/logind.conf ---------------------------------------------------------------------------------------------------------- NAutoVTs=4 # 原本是 6 个而且还批注,请取消批注,然后改成 4 吧 ReserveVT=0 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl stop getty@tty5.service 关闭tty5 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl stop getty@tty6.service 关闭tty6 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl restart systemd-logind.service 重新启动logind.service服务 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl start getty@tty8.service 启动 tty8 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /usr/lib/systemd/system/vsftpd@.service [Unit] Description=Vsftpd ftp daemon After=network.target PartOf=vsftpd.target
[Service] Type=forking ExecStart=/usr/sbin/vsftpd /etc/vsftpd/%i.conf
[Install] WantedBy=vsftpd.target 根据前面 getty@.service 的说明,我们知道在启动的脚本设定当中, %i 或 %I 就是代表 @ 后面接的范例文件名的意思! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cd /etc/vsftpd/ ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# cp vsftpd.conf vsftpd3.conf ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# vim vsftpd3.conf 添加2121 ---------------------------------------------------------------------------------------------------------- listen_port=2121 ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# systemctl start vsftpd@vsftpd3.service 立刻启动后面接的vsftpd3.service ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# systemctl status vsftpd@vsftpd3.service ---------------------------------------------------------------------------------------------------------- status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机预设执行否、登录等信息等 ---------------------------------------------------------------------------------------------------------- [root@localhost vsftpd]# netstat -tlnp ---------------------------------------------------------------------------------------------------------- tcp6 0 0 ::1:6010 :::* LISTEN 18840/sshd: root@pt tcp6 0 0 :::2121 :::* LISTEN 21468/vsftpd ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 自己的服务自己作 ---------------------------------------------------------------------------------------------------------- 作一只可以备份自己系统的服务,这只脚本我放在 /backups底下,内容有点像这样 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# mkdir /backups ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# vim /backups/backup.sh ---------------------------------------------------------------------------------------------------------- #!/bin/bash
source="/etc /home /root /var/lib /var/spool/{cron,at,mail}" target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz" [ ! -d /backups ] && mkdir /backups tar -zcvf ${target} ${source} &> /backups/backup.log ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# chmod a+x /backups/backup.sh 增加可执行的权限 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# ll /backups/backup.sh -rwxr-xr-x. 1 root root 220 6月 10 11:13 /backups/backup.sh ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# vim /etc/systemd/system/backup.service 设计一只名为 backup.service 的启动脚本设定 ---------------------------------------------------------------------------------------------------------- [Unit] Description=backup my server Requires=atd.service
[Service] Type=simple ExecStart=/bin/bash -c " echo /backups/backup.sh | at now"
[Install] WantedBy=multi-user.target # 因为 ExecStart 里面有用到 at 这个指令,因此, atd.service 就是一定要的服务! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl daemon-reload ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl start backup.service ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# systemctl status backup.service ---------------------------------------------------------------------------------------------------------- ● backup.service - backup my server Loaded: loaded (/etc/systemd/system/backup.service; disabled; vendor preset: disabled) Active: inactive (dead)
6月 10 11:25:43 localhost.localdomain systemd[1]: Started backup my server. 6月 10 11:25:43 localhost.localdomain systemd[1]: Starting backup my server... 6月 10 11:25:43 localhost.localdomain bash[22635]: job 1 at Sat Jun 10 11:2... Hint: Some lines were ellipsized, use -l to show in full.
# 为什么 Active 是 inactive 呢?这是因为我们的服务仅是一个简单的 script 啊! # 因此执行完毕就完毕了,不会继续存在内存中 ---------------------------------------------------------------------------------------------------------- 完成上述的动作之后,以后你都可以直接使用 systemctl start backup.service 进行系统的备份了!而且 会直接丢进 atd 的管理中 ---------------------------------------------------------------------------------------------------------- ? systemd.timer 的优势 在 archlinux 的官网 wiki 上面有提到,为啥要使用 systemd.timer 呢? ? 由于所有的 systemd 的服务产生的信息都会被纪录 (log),因此比 crond 在 debug 上面要更清楚方便的多; ? 各项 timer 的工作可以跟 systemd 的服务相结合; ? 各项 timer 的工作可以跟 control group (cgroup,用来取代 /etc/secure/limit.conf 的功能) 结合,来限制该工 作的资源利用 虽然还是有些弱点啦~例如 systemd 的 timer 并没有 email 通知的功能 (除非自己写一个),也没有 类似 anacron 的一段时间内的随机取样功能 (random_delay), 不过,总体来说,还是挺不错的!此 外,相对于 crond 最小的单位到分, systemd 是可以到秒甚至是毫秒的单位哩!相当有趣! ? 任务需求 基本上,想要使用 systemd 的 timer 功能,你必须要有几个要件: ? 系统的 timer.target 一定要启动 ? 要有个 sname.service 的服务存在 (sname 是你自己指定的名称) ? 要有个 sname.timer 的时间启动服务存在 ---------------------------------------------------------------------------------------------------------- 隔 3 小时: 3h 或 3hr 或 3hours 隔 300 分钟过 10 秒: 10s 300m 隔 5 天又 100 分钟: 100m 5day # 通常英文的写法,小单位写前面,大单位写后面~所以先秒、再分、再小时、再天数等~ ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- ? 开机后 2 小时开始执行一次这个 backup.service ? 自从第一次执行后,未来我每两天要执行一次 backup.service ---------------------------------------------------------------------------------------------------------- [root@localhost system]# vim /etc/systemd/system/backup.timer ---------------------------------------------------------------------------------------------------------- [Unit] Description=backup my server timer
[Timer] OnBootSec=2hrs OnUnitActiveSec=2days
[Install] WantedBy=multi-user.target ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl daemon-reload ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl enable backup.timer ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl restart backup.timer ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl list- - unit- - files | grep backup backup.service disabled 这个不需要启动!只要 enable backup.timer 即可! backup.timer enabled ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl show timers.target ConditionTimestamp=Thu 2015-08-13 14:31:11 CST timer 这个 unit 启动的时间! ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl show backup.service ExecMainExitTimestamp=Thu 2015-08-13 14:50:19 CST backup.service 上次执行的时间 ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl show backup.timer NextElapseUSecMonotonic=2d 19min 11.540653s 下一次执行距离 timers.target 的时间 ---------------------------------------------------------------------------------------------------------- 如上表所示,我上次执行 backup.service 的时间是在 2015-08-13 14:50 ,由于设定两个小时执行一 次,因此下次应该是 2015-08-15 14:50 执行才对! 由于 timer 是由 timers.target 这个 unit 所管理 的,而这个 timers.target 的启动时间是在 2015-08-13 14:31 , 要注意,最终 backup.timer 所纪录的 下次运行时间,其实是与 timers.target 所纪录的时间差!因此是『 2015-08-15 14:50 - 2015-08-13 14:31 』才对! 所以时间差就是 2d 19min 啰! ---------------------------------------------------------------------------------------------------------- 一个固定日期运作的案例 上面的案例是固定周期运作一次,那如果我希望不管上面如何运作了,我都希望星期天凌晨 2 点运 作这个备份程序一遍呢?请注意,因为已经存在 backup.timer 了! 所以,这里我用 backup2.timer 来 做区隔喔! ---------------------------------------------------------------------------------------------------------- [root@localhost system]# vim /etc/systemd/system/backup2.timer ---------------------------------------------------------------------------------------------------------- [Unit] Description=backup my server timer2
[Timer] OnCalendar=Sun *-*-* 02:00:00 Perdidtrnt=true Unit=backup.service
[Install] WantedBy=multi-user.target ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl daemon-reload ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl enable backup2.timer ---------------------------------------------------------------------------------------------------------- Created symlink from /etc/systemd/system/multi-user.target.wants/backup2.timer to /etc/systemd/system/backup2.timer ---------------------------------------------------------------------------------------------------------- [root@localhost system]# systemctl start backup2.timer ---------------------------------------------------------------------------------------------------------- NextElapseUSecRealtime=47y 5month 1w 1d 19h 30min ---------------------------------------------------------------------------------------------------------- 与循环时间运作差异比较大的地方,在于这个 OnCalendar 的方法对照的时间并不是 times.target 的 启动时间,而是 Unix 标准时间! 亦即是 1970-01-01 00:00:00 去比较的!因此,当你看到最后出现 的 NextElapseUSecRealtime 时,哇!下一次执行还要 45 年 + 7 个月 + 1 周 + 6 天 + 10 小时过 30 分~刚看到的时候,鸟哥确实因此揉了揉眼睛~确定没有看错...这才了解原来比对的是『日历时 间』而不是某个 unit 的启动时间啊!呵呵! ---------------------------------------------------------------------------------------------------------- CentOS 7.x 预设启动的服务内容 服务名称 功能简介 ------------------------------------------------------------------------------------------| abrtd ( 系统)abrtd 服务可以提供使用者一些方式,让使用者可以针对不同的应用软件去设计错误登录的 机制, 当软件产生问题时,用户就可以根据 abrtd 的登录档来进行错误克服的行为。还有其他 的 abrt-xxx.service 均是使用这个服务来加强应用程序 debug 任务的。 --------------------------------------------------------------------------------------------| accounts-daemon (可关闭) ( 系统)使用 accountsservice 计划所提供的一系列 D-Bus 界面来进行使用者帐户信息的查询。 基 本上是与 useradd, usermod, userdel 等软件有关。 ------------------------------------------------------------------------------------------| alsa-X (可关闭) ( 系统)开头为 alsa 的服务有不少,这些服务大部分都与音效有关!一般来说, 服务器且不开图 形界面的话,这些服务可以关闭! ------------------------------------------------------------------------------------------| atd ( 系统)单一的例行性工作排程,详细说明请参考第十五章。 抵挡机制的配置文件在 /etc/at.{allow,deny} 喔! ---------------------------------------------------------------------------------------------| auditd ( 系统)还记得前一章的 SELinux 所需服务吧? 这就是其中一项,可以让系统需 SELinux 稽核的讯 息写入 /var/log/audit/audit.log 中。 -------------------------------------------------------------------------------------------| avahi-daemon (可关闭) ( 系统)也是一个客户端的服务,可以透过 Zeroconf 自动的分析与管理网络。 Zeroconf 较常用在 笔记本电脑与行动装置上,所以我们可以先关闭他啦! -------------------------------------------------------------------------------------------| brandbot rhel-* ( 系统)这些服务大多用于开机过程中所需要的各种侦测环境的脚本,同时也提供网络界面的启动 与关闭。 基本上,你不要关闭掉这些服务比较妥当! --------------------------------------------------------------------------------------------| chronyd ntpd ntpdate ( 系统)都是网络校正时间的服务!一般来说,你可能需要的仅有 chronyd 而已! ------------------------------------------------------------------------------------------| cpupower ( 系统)提供 CPU 的运作规范~可以参考 /etc/sysconfig/cpupower 得到更多的信息! 这家伙与你 的 CPU 使用情况有关喔! ----------------------------------------------------------------------------------------------| crond ( 系统)系统配置文件为 /etc/crontab,详细数据可参考第十五章的说明。 --------------------------------------------------------------------------------------------| cups (可关闭) ( 系统/ 网络)用来管理打印机的服务,可以提供网络联机的功能,有点类似打印服务器的功能哩! 你可以在 Linux 本机上面以浏览器的 http://localhost:631 来管理打印机喔!由于我们目前没有打 印机,所以可以暂时关闭他。 ---------------------------------------------------------------------------------------------------------- dbus ( 系统)使用 D-Bus 的方式在不同的应用程序之间传送讯息, 使用的方向例如应用程序间的讯息传 递、每个用户登入时提供的讯息数据等。 -------------------------------------------------------------------------------------------- dm-event multipathd ( 系统)监控装置对应表 (device mapper) 的主要服务,当然不能关掉啊! 否则就无法让 Linux 使 用我们的外围装置与储存装置了! -------------------------------------------------------------------------------------------- dmraid-activation mdmonitor ( 系统)用来启动 Software RAID 的重要服务!最好不要关闭啦!虽然你可能没有 RAID。 -------------------------------------------------------------------------------------------- dracut-shutdown ( 系统)用来处理 initramfs 的相关行为,这与开机流程相关性较高~ -------------------------------------------------------------------------------------------- ebtables ( 系统/ 网络)透过类似 iptables 这种防火墙规则的设定方式,设计网络卡作为桥接时的封包分析政 策。 其实就是防火墙。不过与底下谈到的防火墙应用不太一样。如果没有使用虚拟化,或者启用 了 firewalld ,这个服务可以不启动。 -------------------------------------------------------------------------------------------- emergency rescue ( 系统)进入紧急模式或者是救援模式的服务 -------------------------------------------------------------------------------------------- firewalld ( 系统/ 网络)就是防火墙!以前有 iptables 与 ip6tables 等防火墙机制,新的 firewalld 搭配 firewall-cmd 指令,可以快速的建置好你的防火墙系统喔!因此,从 CentOS 7.1 以后,iptables 服 务的启动脚本已经被忽略了! 请使用 firewalld 来取代 iptables 服务喔! -------------------------------------------------------------------------------------------- gdm ( 系统)GNOME 的登入管理员,就是图形界面上一个很重要的登入管理服务! -------------------------------------------------------------------------------------------- getty@ ( 系统)就是要在本机系统产生几个文字界面 (tty) 登入的服务啰! -------------------------------------------------------------------------------------------- hyper* ksm* libvirt* vmtoolsd ( 系统)跟建立虚拟机有关的许多服务!如果你不玩虚拟机, 那么这些服务可以先关闭。此外,如 果你的 Linux 本来就在虚拟机的环境下,那这些服务对你就没有用!因为这些服务是让实体机器 来建立虚拟机的! -------------------------------------------------------------------------------------------- irqbalance ( 系统)如果你的系统是多核心的硬件,那么这个服务要启动, 因为它可以自动的分配系统中断 (IRQ) 之类的硬件资源。 -------------------------------------------------------------------------------------------- iscsi* ( 系统)可以挂载来自网络驱动器机的服务!这个服务可以在系统内仿真好贵的 SAN 网络驱动器。 如果你确定系统上面没有挂载这种网络驱动器,也可以将他关闭的。 -------------------------------------------------------------------------------------------- kdump (可关闭) ( 系统)在安装 CentOS 的章节就谈过这东西,主要是 Linux 核心如果出错时,用来纪录内存的东 西。 鸟哥觉得不需要启动他!除非你是核心黑客! -------------------------------------------------------------------------------------------- lvm2-* ( 系统)跟 LVM 相关性较高的许多服务,当然也不能关!不然系统上面的 LVM2 就没人管了! -------------------------------------------------------------------------------------------- microcode ( 系统)Intel 的 CPU 会提供一个外挂的微指令集提供系统运作, 不过,如果你没有下载 Intel 相 关的指令集文件,那么这个服务不需要启动的,也不会影响系统运作。 -------------------------------------------------------------------------------------------- ModemManager network NetworkManager* ( 系统/ 网络)主要就是调制解调器、网络设定等服务!进入 CentOS 7 之后,系统似乎不太希望我 们使用 network 服务了, 比较建议的是使用 NetworkManager 搭配 nmcli 指令来处理网络设 定~所以,反而是 NetworkManager 要开,而 network 不用开哩! -------------------------------------------------------------------------------------------- quotaon ( 系统)启动 Quota 要用到的服务喔! -------------------------------------------------------------------------------------------- rc-local ( 系统)兼容于 /etc/rc.d/rc.local 的呼叫方式!只是,你必须要让 /etc/rc.d/rc.local 具有 x 的权限 后, 这个服务才能真的运作!否则,你写入 /etc/rc.d/rc.local 的脚本还是不会运作的喔! -------------------------------------------------------------------------------------------- rsyslog ( 系统)这个服务可以记录系统所产生的各项讯息, 包括 /var/log/messages 内的几个重要的登录 档啊。 -------------------------------------------------------------------------------------------- smartd ( 系统)这个服务可以自动的侦测硬盘状态,如果硬盘发生问题的话, 还能够自动的回报给系统管 理员,是个非常有帮助的服务喔!不可关闭他啊! -------------------------------------------------------------------------------------------- sysstat ( 系统)事实上,我们的系统有只名为 sar 的指令会记载某些时间点下,系统的资源使用情况,包 括 CPU/流量/输入输出量等, 当 sysstat 服务启动后,这些纪录的数据才能够写入到纪录文件 (log) 里面去! -------------------------------------------------------------------------------------------- systemd-* ( 系统)大概都是属于系统运作过程所需要的服务,没必要都不要更动它的预设状态! plymount* -------------------------------------------------------------------------------------------- upower ( 系统)与图形界面的使用相关性较高的一些服务!没启动图形界面时,这些服务可以暂时不管他 ---------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------- 其他服务的简易说明 服务名称 功能简介 ---------------------------------------------------------------------------------------------------------- dovecot ( 网络)可以设定 POP3/IMAP 等收受信件的服务,如果你的 Linux 主机是 email server 才需要这个 服务,否则不需要启动他啦! ---------------------------------------------------------------------------------------------------------- httpd ( 网络)这个服务可以让你的 Linux 服务器成为 www server 喔! ---------------------------------------------------------------------------------------------------------- named ( 网络)这是领域名服务器 (Domain Name System) 的服务, 这个服务非常重要,但是设定非常困难! 目前应该不需要这个服务啦! ---------------------------------------------------------------------------------------------------------- nfs ( 网络)这就是 Network Filesystem,是 Unix-Like 之间互相作为网络驱动器机的一个功能。 ---------------------------------------------------------------------------------------------------------- nfs-server smb nmb ( 网络)这个服务可以让 Linux 仿真成为 Windows 上面的网络上的芳邻。 如果你的 Linux 主机想要 做为 Windows 客户端的网络驱动器机服务器,这玩意儿得要好好玩一玩。 ---------------------------------------------------------------------------------------------------------- vsftpd ( 网络)作为文件传输服务器 (FTP) 的服务。 ---------------------------------------------------------------------------------------------------------- sshd ( 网络)这个是远程联机服务器的软件功能, 这个通讯协议比 telnet 好的地方在于 sshd 在传送资 料时可以进行加密喔!这个服务不要关闭他啦! ---------------------------------------------------------------------------------------------------------- rpcbind ( 网络)达成 RPC 协议的重要服务!包括 NFS, NIS 等等都需要这东西的协助! ---------------------------------------------------------------------------------------------------------- postfix ( 网络)寄件的邮件主机~因为系统还是会产生很多 email 讯息!例如 crond / atd 就会传送 email 给本机用户! 所以这个服务千万不能关!即使你不是 mail server 也是要启用这服务才行! ---------------------------------------------------------------------------------------------------------- |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ---------------------------------------------------------------------------------------------------------- 登录文件可以帮助我们了解很多系统重要的事件,包括登入者的部分信息,因此登录文件的权限通常 是设定为仅有 root 能够读取而已。 而由于登录文件可以记载系统这么多的详细信息,所以啦,一 个有经验的主机管理员会随时随地查阅一下自己的登录檔, 以随时掌握系统的最新脉动!那么常见 的几个登录档有哪些呢?一般而言,有下面几个: ----------------------------------------------------------------------------------------------------------
开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在 /var/log/boot.log 里面哩! 不过这个文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/boot.log ---------------------------------------------------------------------------------------------------------- [ OK ] Started Show Plymouth Boot Screen. [ OK ] Reached target Paths. [ OK ] Reached target Basic System. [ OK ] Found device /dev/mapper/cl-root. Starting File System Check on /dev/mapper/cl-root... [ OK ] Started File System Check on /dev/mapper/cl-root. [ OK ] Started dracut initqueue hook. Mounting /sysroot... [ OK ] Reached target Remote File Systems (Pre). [ OK ] Reached target Remote File Systems. [ OK ] Mounted /sysroot. [ OK ] Reached target Initrd Root File System. Starting Reload Configuration from the Real Root... ---------------------------------------------------------------------------------------------------------- 你的 crontab 排程有没有实际被进行? 进行过程有没有发生错误? 你的 /etc/crontab 是否撰写正确?在这个登录档内查询看看 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/cron Jun 11 18:41:01 localhost run-parts(/etc/cron.daily)[6462]: finished logrotate Jun 11 18:41:01 localhost run-parts(/etc/cron.daily)[6449]: starting man-db.cron Jun 11 18:41:02 localhost run-parts(/etc/cron.daily)[6473]: finished man-db.cron Jun 11 18:41:02 localhost run-parts(/etc/cron.daily)[6449]: starting mlocate Jun 11 18:41:04 localhost run-parts(/etc/cron.daily)[6515]: finished mlocate Jun 11 18:41:04 localhost anacron[5207]: Job `cron.daily‘ terminated ---------------------------------------------------------------------------------------------------------- 记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程 取消显示, 因此额外将数据记录一份在这个文件中; ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/dmesg ---------------------------------------------------------------------------------------------------------- :1 across:2097148k FS [ 3.713658] alg: No test for crc32 (crc32-pclmul) [ 3.715502] intel_rapl: no valid rapl domains found in package 0 [ 3.717491] XFS (sda1): Mounting V5 Filesystem [ 3.970488] XFS (sda1): Starting recovery (logdev: internal) [ 3.973570] XFS (sda1): Ending recovery (logdev: internal) [ 5.115778] XFS (dm-2): Mounting V5 Filesystem [ 5.129007] XFS (dm-2): Starting recovery (logdev: internal) [ 5.132291] XFS (dm-2): Ending recovery (logdev: internal) [ 6.607808] floppy0: no floppy controllers found [ 6.684893] type=1305 audit(1497348588.883:4): audit_pid=692 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1 [ 6.777589] NET: Registered protocol family 40 ---------------------------------------------------------------------------------------------------------- 可以记录系统上面所有的账号最近一次登入系统时的相关信息。第十三章讲到的 lastlog 指令就是利用这个 文件的记录信息来显示的。 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/lastlog e??Ypts/2172.16.253.1410& ---------------------------------------------------------------------------------------------------------- 记录邮件的往来信息,其实主要是记录 postfix (SMTP 协议提供者) 与 dovecot (POP3 协议提供者) 所产生 的讯息啦。 SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。 postfix 与 dovecot 则分 别是两套达成通讯协议的软件。 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/mail/* ---------------------------------------------------------------------------------------------------------- Jun 12 17:15:00 localhost postfix/pickup[27785]: 720C7609BBAD: uid=0 from=<root> Jun 12 17:15:00 localhost postfix/cleanup[27806]: 720C7609BBAD: message-id=<20170612091500.720C7609BBAD@localhost.localdomain> Jun 12 17:15:00 localhost postfix/qmgr[1546]: 720C7609BBAD: from=<root@localhost.localdomain>, size=531, nrcpt=1 (queue active) ---------------------------------------------------------------------------------------------------------- 这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中; 如果系统 发生莫名的错误时,这个文件是一定要查阅的登录档之一。 ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/messages ---------------------------------------------------------------------------------------------------------- Jun 13 18:41:19 localhost systemd: Failed to start OpenSSH server daemon 2. Jun 13 18:41:19 localhost systemd: Unit sshd2.service entered failed state. Jun 13 18:41:19 localhost systemd: sshd2.service failed. Jun 13 18:42:01 localhost systemd: sshd2.service holdoff time over, scheduling restart. Jun 13 18:42:01 localhost systemd: Starting OpenSSH server daemon 2... ---------------------------------------------------------------------------------------------------------- 基本上,只要牵涉到『需要输入账号密码』的软件,那么当登入时 (不管登入正确或错误) 都会被记录在此 文件中。 包括系统的 login 程序、图形接口登入所使用的 gdm 程序、 su, sudo 等程序、还有网络联机的 ssh, telnet 等程序, 登入信息都会被记载在这里; ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/secure ---------------------------------------------------------------------------------------------------------- Jun 13 18:30:16 localhost sshd[3577]: Received signal 15; terminating. Jun 13 18:30:58 localhost sshd[3721]: Server listening on 0.0.0.0 port 222. Jun 13 18:30:58 localhost sshd[3721]: Server listening on :: port 222. Jun 13 18:32:29 localhost sshd[3721]: Received signal 15; terminating. Jun 13 18:33:11 localhost sshd[3739]: Server listening on 0.0.0.0 port 222. ---------------------------------------------------------------------------------------------------------- 可以记录正确登入系统者的帐户信息 (wtmp) 与错误登入时所使用的帐户信息 (faillog) ! 我们 last 就是读取 wtmp 来显示的, 这对于追踪一般账号者的使用行为很有帮助! ---------------------------------------------------------------------------------------------------------- [root@localhost ~]# cat /var/log/wtmp ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项讯息!上述的目录内则是个别服务 所制订的登录档。 ---------------------------------------------------------------------------------------------------------- /var/log/httpd/*, /var/log/samba/*: ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 自行增加登录文件文件功能 ---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /etc/rsyslog.conf 在底部加入 ---------------------------------------------------------------------------------------------------------- # Add by VBird 2017/06/15 *.info /var/log/admin.log ---------------------------------------------------------------------------------------------------------- [root@m ~]# systemctl restart rsyslog.service 然后重启这个服务 ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /var/log/admin.log -rw-------. 1 root root 537 6月 16 04:30 /var/log/admin.log ---------------------------------------------------------------------------------------------------------- [root@m ~]# chattr +a /var/log/admin.log 为其增加a权限预防删除 ---------------------------------------------------------------------------------------------------------- [root@m ~]# rm -rf /var/log/admin.log rm: 无法删除"/var/log/admin.log": 不允许的操作 ---------------------------------------------------------------------------------------------------------- 再想象一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部 主机的状态,因此, ---------------------------------------------------------------------------------------------------------- # 1. Server 端:修改 rsyslogd 的启动配置文件,在 /etc/rsyslog.conf 内! ---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /etc/rsyslog.conf 在底部加入底下的是 TCP 埠口! ---------------------------------------------------------------------------------------------------------- $ModLoad imtcp $InputTCPServerRun 514 ---------------------------------------------------------------------------------------------------------- # 2. [root@m ~]# systemctl restart rsyslog.service 重新启动 ---------------------------------------------------------------------------------------------------------- [root@m ~]# netstat -ltnp | grep syslog 观察 rsyslogd 喔! tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 3762/rsyslogd tcp6 0 0 :::514 :::* LISTEN 3762/rsyslogd ---------------------------------------------------------------------------------------------------------- 透过以上这个简单的动作, Linux 主机已经可以接收来自其他主机的登录信息了! ---------------------------------------------------------------------------------------------------------- 上面的主机地址是172.16.252.155
现在是在另一台主机 [root@m ~]# vim /etc/rsyslog.conf 在底部加入 ---------------------------------------------------------------------------------------------------------- *.* @@172.16.252.155 ---------------------------------------------------------------------------------------------------------- [root@m ~]# systemctl restart rsyslog.service 注每次开机时重启这个服务 ---------------------------------------------------------------------------------------------------------- 再重新启动 rsyslog.service 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名』 就会显示来自不同主机的信息了。 ---------------------------------------------------------------------------------------------------------- [root@m ~]# cat /var/log/admin.log 查看登录日志 ---------------------------------------------------------------------------------------------------------- Jun 16 07:58:01 m systemd: Created slice user-388.slice. Jun 16 07:58:01 m systemd: Starting user-388.slice. Jun 16 07:58:01 m systemd: Started Session 3 of user pcp. Jun 16 07:58:01 m systemd: Starting Session 3 of user pcp. Jun 16 07:58:01 m CROND[2917]: (pcp) CMD ( /usr/libexec/pcp/bin/pmie_check -C) Jun 16 07:58:01 m systemd: Removed slice user-388.slice. Jun 16 07:58:01 m systemd: Stopping user-388.slice. ---------------------------------------------------------------------------------------------------------- 预设的 logrotate 的内容 ---------------------------------------------------------------------------------------------------------- [root@study ~]# vim /etc/logrotate.conf # 底下的设定是 "logrotate 的预设设定值" ,如果个别的文件设定了其他的参数, # 则将以个别的文件设定为主,若该文件没有设定到的参数则以这个文件的内容为默认值! weekly <==预设每个礼拜对登录档进行一次 rotate 的工作 rotate 4 <==保留几个登录档呢?预设是保留四个! create <==由于登录档被更名,因此建立一个新的来继续储存之意! dateext <==就是这个设定值!可以让被轮替的文件名加上日期作为档名喔! #compress <==被更动的登录档是否需要压缩?如果登录档太大则可考虑此参数启动 include /etc/logrotate.d # 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行 rotate 的工作! /var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数 monthly <==每个月一次,取代每周! create 0664 root utmp <==指定新建文件的权限与所属账号/群组 minsize 1M <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数) rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。 } # 这个 wtmp 可记录登入者与系统重新启动时的时间与来源主机及登入期间的时间。 # 由于具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。 # 由于仅保留一个登录档而已,不满意的话可以将他改成 rotate 5 吧! ---------------------------------------------------------------------------------------------------------- logrotate.conf 的设定语 法是: 登录文件的绝对路径文件名 ... { 个别的参数设定值,如 monthly, compress 等等 } ---------------------------------------------------------------------------------------------------------- 底下我们再以 /etc/logrotate.d/syslog 这个轮替 rsyslog.service 服务的文件,来看看该如何设定他的 rotate 呢? [root@study ~]# vim /etc/logrotate.d/syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } ----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /etc/logrotate.d/syslog ---------------------------------------------------------------------------------------------------------- /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts prerotate /usr/bin/chattr -a /var/log/messages endscript sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/chattr +a /var/log/messages endscript } ---------------------------------------------------------------------------------------------------------- 看到否?就是先给他去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作, 然后 执行了轮替之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP ... 的意义,这一行的 目的在于将系统的 rsyslogd 重新以其参数档 (rsyslog.conf) 的资料读入一次!也可以想成是 reload 的意思啦! 由于我们建立了一个新的空的记录文件,如果不执行此一行来重新启动服务的话, 那么 记录的时候将会发生错误呦! ---------------------------------------------------------------------------------------------------------- 执行一次 logrotate 看看整个流程为何? [root@m ~]# logrotate -v /etc/logrotate.conf ---------------------------------------------------------------------------------------------------------- reading config file /etc/logrotate.conf <==读取主要配置文件 including /etc/logrotate.d <==呼叫外部的设定 reading config file chrony <==就是外部设定啊! ....(中间省略).... Handling 18 logs <==共有 18 个登录文件被记录 considering log /var/log/messages <==开始处理 messages log does not need rotating <==因为时间未到,不需要更动! ....(底下省略).... ---------------------------------------------------------------------------------------------------------- 强制进行 logrotate 的动作 ---------------------------------------------------------------------------------------------------------- [root@m ~]# logrotate -vf /etc/logrotate.conf ---------------------------------------------------------------------------------------------------------- ....(前面省略).... rotating log /var/log/messages, log->rotateCount is 52 dateext suffix ‘-20150820‘ glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]‘ compressing log with: /bin/gzip ....(底下省略).... # 看到否?整个 rotate 的动作就是这样一步一步进行的~ ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /var/log/messages*; lsattr /var/log/messages -rw-------. 1 root root 139 6月 16 10:14 /var/log/messages -rw-------. 1 root root 1347206 6月 16 10:10 /var/log/messages-20170616 -----a---------- /var/log/messages ---------------------------------------------------------------------------------------------------------- 上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化啰! ---------------------------------------------------------------------------------------------------------- 由于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate ---------------------------------------------------------------------------------------------------------- 于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate 啰! 不用担心的啦!只是要注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼: Aug 20 01:45:34 study rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="2145" x-info="http://www.rsyslog.com"] rsyslogd was HUPed ---------------------------------------------------------------------------------------------------------- 这说明的是 rsyslogd 重新启动的时间啦 (就是因为 /etc/logrotate.d/syslog 的设定之缘故!) ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 自定义登录文件的轮替功能 假设你已经建立了 /var/log/admin.log 这个文件, 现在,你想要 将该文件加上 +a 这个隐藏标签,而且设定底下的相关信息: ? 登录档轮替一个月进行一次; ? 该登录档若大于 10MB 时,则主动进行轮替,不需要考虑一个月的期限; ? 保存五个备份文件; ? 备份文件需要压缩 ---------------------------------------------------------------------------------------------------------- # 1. 先建立 +a 这个属性啊 ---------------------------------------------------------------------------------------------------------- root@m ~]# chattr +a /var/log/admin.log ---------------------------------------------------------------------------------------------------------- [root@m ~]# lsattr /var/log/admin.log -----a---------- /var/log/admin.log ---------------------------------------------------------------------------------------------------------- [root@m ~]# mv /var/log/admin.log /var/log/admin.log.1 mv: 无法将"/var/log/admin.log" 移动至"/var/log/admin.log.1": 不允许的操作 ---------------------------------------------------------------------------------------------------------- # 2. 开始建立 logrotate 的配置文件,增加一个文件在 /etc/logrotate.d 内就对了! ---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /etc/logrotate.d/admin #This configuration is from VBird 2017/06/16 /var/log/admin.log { monthly 每个月进行一次 size=10M 文件容量大于10M则开始处置 rotate 5 保留五个 compress 进行压缩工作 sharedscripts prerotate /usr/bin/chattr -a /var/log/admin.log endscript sharedscripts postrotate /bin/kill HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/chattr +a /var/log/admin.log endscript } ---------------------------------------------------------------------------------------------------------- # 3. 测试一下 logrotate 相关功能的信息显示: ---------------------------------------------------------------------------------------------------------- [root@m ~]# logrotate -v /etc/logrotate.conf ---------------------------------------------------------------------------------------------------------- ....(前面省略).... not running prerotate script, since no logs will be rotated not running postrotate script, since no logs were rotated ....(底下省略).... # 因为还不足一个月,文件也没有大于 10M,所以不需进行轮替! ----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@study ~]# vim /etc/logrotate.conf # 底下的设定是 "logrotate 的预设设定值" ,如果个别的文件设定了其他的参数, # 则将以个别的文件设定为主,若该文件没有设定到的参数则以这个文件的内容为默认值! weekly <==预设每个礼拜对登录档进行一次 rotate 的工作 rotate 4 <==保留几个登录档呢?预设是保留四个! create <==由于登录档被更名,因此建立一个新的来继续储存之意! dateext <==就是这个设定值!可以让被轮替的文件名加上日期作为档名喔! #compress <==被更动的登录档是否需要压缩?如果登录档太大则可考虑此参数启动 include /etc/logrotate.d # 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行 rotate 的工作! /var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数 monthly <==每个月一次,取代每周! create 0664 root utmp <==指定新建文件的权限与所属账号/群组 minsize 1M <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数) rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。 } # 这个 wtmp 可记录登入者与系统重新启动时的时间与来源主机及登入期间的时间。 # 由于具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。 # 由于仅保留一个登录档而已,不满意的话可以将他改成 rotate 5 吧! ---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /etc/logrotate.d/syslog ---------------------------------------------------------------------------------------------------------- /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts prerotate /usr/bin/chattr -a /var/log/messages endscript sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/chattr +a /var/log/messages endscript } ---------------------------------------------------------------------------------------------------------- [root@m ~]# logrotate -v /etc/logrotate.conf 执行一次 logrotate 看看整个流程为何 ---------------------------------------------------------------------------------------------------------- [root@m ~]# logrotate -vf /etc/logrotate.conf强制进行 logrotate 的动作 ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /var/log/messages*; lsattr /var/log/messages -rw-------. 1 root root 3238 6月 16 10:58 /var/log/messages -rw-------. 1 root root 1347206 6月 16 10:10 /var/log/messages-20170616 -----a---------- /var/log/messages ---------------------------------------------------------------------------------------------------------- 上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化啰 ----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@study ~]# chattr +a /var/log/admin.log [root@study ~]# lsattr /var/log/admin.log -----a---------- /var/log/admin.log [root@study ~]# mv /var/log/admin.log /var/log/admin.log.1 mv: cannot move `/var/log/admin.log‘ to `/var/log/admin.log.1‘: Operation not permitted # 这里确定了加入 a 的隐藏属性!所以 root 无法移动此登录档! # 2. 开始建立 logrotate 的配置文件,增加一个文件在 /etc/logrotate.d 内就对了! [root@study ~]# vim /etc/logrotate.d/admin # This configuration is from VBird 2015/08/19 /var/log/admin.log { monthly <==每个月进行一次 size=10M <==文件容量大于 10M 则开始处置 rotate 5 <==保留五个! compress <==进行压缩工作! sharedscripts prerotate /usr/bin/chattr -a /var/log/admin.log endscript sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/chattr +a /var/log/admin.log endscript } ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 选项与参数: 预设会秀出全部的 log 内容,从旧的输出到最新的讯息 -n :秀出最近的几行的意思~找最新的信息相当有用 -r :反向输出,从最新的输出到最旧的数据 -p :秀出后面所接的讯息重要性排序!请参考前一小节的 rsyslogd 信息 -f :类似 tail -f 的功能,持续显示 journal 日志的内容(实时监测时相当有帮助!) --since --until:设定开始与结束的时间,让在该期间的数据输出而已 _SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已 _COMM=bash :只输出与 bash 有关的信息 _PID=pid :只输出 PID 号码的信息 _UID=uid :只输出 UID 为 uid 的信息 SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来呼叫出正确的数据! ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl 秀出目前系统中所有的journal ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl --since "2017-06-15 00:00:00" --until "2017-06-16 00:00:00" ---------------------------------------------------------------------------------------------------------- 仅显示出2017/06/15一整天的日志 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl --since today 仅显示今天的日志 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl --since yesterday --until today 仅昨天的日志数据内容 -- Logs begin at 五 2017-06-16 09:26:27 CST, end at 五 2017-06-16 13:10:01 CST. -- ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10 ---------------------------------------------------------------------------------------------------------- 只找出crond.service的数据,同时列出最新的10笔即可 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl -p err 找出讯息严重等级错误(eror)的讯息 -- Logs begin at 五 2017-06-16 09:26:27 CST, end at 五 2017-06-16 13:20:01 CST. -- 6月 16 09:26:27 localhost.localdomain kernel: sd 0:0:0:0: [sda] Assuming drive cache: write th 6月 16 09:26:28 m.localdomain kernel: piix4_smbus 0000:00:07.3: Host SMBus controller not enab 6月 16 09:26:29 m.localdomain kernel: intel_rapl: no valid rapl domains found in package 0 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 找出登录服务(auth,authpriv)有关的登录文件讯息 -- Logs begin at 五 2017-06-16 09:26:27 CST, end at 五 2017-06-16 13:20:01 CST. -- 6月 16 09:26:32 m.localdomain systemd-logind[694]: New seat seat0. 6月 16 09:26:32 m.localdomain systemd-logind[694]: Watching system buttons on /dev/input/event 6月 16 09:26:32 m.localdomain polkitd[708]: Loading rules from directory /etc/polkit-1/rules.d 6月 16 09:26:32 m.localdomain polkitd[708]: Loading rules from directory /usr/share/polkit-1/r 6月 16 09:26:32 m.localdomain polkitd[708]: Finished loading, compiling and executing 7 rules 6月 16 09:26:32 m.localdomain polkitd[708]: Acquired the name org.freedesktop.PolicyKit1 on th 6月 16 09:26:43 m.localdomain sshd[1141]: Server listening on 0.0.0.0 port 22. ---------------------------------------------------------------------------------------------------------- 第一号终端机,请使用底下的方式持续侦测系统 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl -f 这时就像卡住了 ,其实不是卡是类似于tail -f在持续的显示登录文件信息的 ---------------------------------------------------------------------------------------------------------- 第二号终端机,使用底下的方式随便发一封 email 给系统上的账号 ---------------------------------------------------------------------------------------------------------- [root@m ~]# echo "testing" | mail -s ‘tset‘ dmtsai ---------------------------------------------------------------------------------------------------------- 这时会发现到第一台终端机一直输出一些讯息 ---------------------------------------------------------------------------------------------------------- 如果有一些必须要侦测的行为,可以使用这种方式来实时了解系统出现的讯息 取消是 Ctrl加c ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@m ~]# logger -p user.info "I will check logger command" 让dmtsai使用logger来传送数据到登录文件内 您在 /var/spool/mail/root 中有邮件 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl SYSLOG_FACILITY=1 -n 3 -- Logs begin at 五 2017-06-16 09:26:27 CST, end at 五 2017-06-16 13:47:11 CST. -- 6月 16 09:26:51 m.localdomain pulseaudio[2289]: [pulseaudio] pid.c: Daemon already running. 6月 16 13:44:47 m.localdomain root[7523]: I will check logger command 6月 16 13:45:25 m.localdomain root[7524]: I will check logger command ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 现在,让我们来瞧一瞧,如果我们之钱写的 backup.service 服务中,如果使用手动的方式来备份,亦 即是使用 "/backups/backup.sh log" 来执行备份时, 那么就透过 logger 来记录备份的开始与结束的 时间!该如何是好呢?这样作看看! ---------------------------------------------------------------------------------------------------------- [root@m ~]# vim /backups/backup.sh ---------------------------------------------------------------------------------------------------------- #!/bin/bash
if [ "${1}" == "log" ]; then logger -p syslog.info "backup.sh is starting" fi source="/etc /home /root /var/lib /var/spool/{cron,at,mail}" target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz" [ ! -d /backups ] && mkdir /backups tar -zcvf ${target} ${source} &> /backups/backup.log if [ "${1}" == "log" ]; then logger -p syslog.info "backup.sh is finished" fi ---------------------------------------------------------------------------------------------------------- [root@m ~]# chmod +x /backups/backup.sh ---------------------------------------------------------------------------------------------------------- [root@m ~]# /backups/backup.sh log 执行脚本 ---------------------------------------------------------------------------------------------------------- [root@m ~]# journalctl SYSLOG_FACILITY=5 -n 3 -- Logs begin at 五 2017-06-16 09:26:27 CST, end at 五 2017-06-16 14:10:30 CST. -- 6月 16 09:26:28 m.localdomain systemd-journald[88]: Received SIGTERM from PID 1 (systemd). 6月 16 14:10:22 m.localdomain root[8037]: backup.sh is starting 6月 16 14:10:30 m.localdomain root[8041]: backup.sh is finished ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /backups/ 总用量 53008 -rw-r--r--. 1 root root 2434876 6月 16 14:10 backup.log -rwxr-xr-x. 1 root root 379 6月 16 14:07 backup.sh -rw-r--r--. 1 root root 51836076 6月 16 14:10 backup-system-2017-06-16.tar.gz ---------------------------------------------------------------------------------------------------------- 透过这个玩意儿,我们也能够将数据自行处置到登录文件当中啰 ----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- 只是如果想要保持journalctl所读取的登录档那么就要建立一个 /var/log/journal 的目录,并且处理一下该目录的权限 ,那么未来重新启动systemd-journld.service 之后,日志登录文件就会主动的复制一份到 /var/log/journal 目录下!
保存journal的方式 ---------------------------------------------------------------------------------------------------------- [root@m ~]# mkdir /var/log/journal ---------------------------------------------------------------------------------------------------------- [root@m ~]# chown root:systemd-journal /var/log/journal 更改其所属主 ---------------------------------------------------------------------------------------------------------- [root@m ~]# systemctl restart systemd-journald.service 重新启动systemd-journald并且观察备份的日志数据 ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /var/log/journal/ 总用量 0 drwxr-sr-x. 2 root systemd-journal 28 6月 17 00:42 a336180ca7bf4b85bd11a99fd1457e01 ---------------------------------------------------------------------------------------------------------- 此外,未来在 /run/log 底下就没有相关的日志可以观察了!因为移动到 /var/log/journal 底下 ---------------------------------------------------------------------------------------------------------- 既然我们还有 rsyslog.service 以及 logrotate 的存在,因此这个systemd-journald.service 产生的登录档,最好还是 放置到/run/log 的内存当中,以加快存取的速度!而既然 rsyslog.service 可以存放我们的登录档,似乎也没有必要再保 存一份journal 登录文件到系统当中了。 ---------------------------------------------------------------------------------------------------------- CentOS 预设提供的 logwatch
虽然有一些有用的系统指令,不过,要了解系统的状态,还是得要分析整个登录档才行~ 事实上, 目前已经有相当多的登录档分析工具,例如 CentOS 7.x 上面预设的 logwatch 这个套件所提供的分 析工具, 他会每天分析一次登录文件,并且将数据以 email 的格式寄送给 root 呢! 你也可以直接 到 logwatch 的官方网站上面看看 ++++++++++++++++++++++++++++++++++++++++++++++++++++
---------------------------------------------------------------------------------------------------------- [root@m ~]# yum install /mnt/Packages/per1-5.*.rpm 得要安装数个软件才能够顺利的安装好 logwatch 喔 ---------------------------------------------------------------------------------------------------------- [root@m ~]# yum install logwatch 安装日志监控工具分析后通过邮件发给root ---------------------------------------------------------------------------------------------------------- [root@m ~]# ll /etc/cron.daily/0logwatch -rwxr-xr-x. 1 root root 434 11月 6 2016 /etc/cron.daily/0logwatch ---------------------------------------------------------------------------------------------------------- [root@m ~]# /etc/cron.daily/0logwatch 执行脚本 ---------------------------------------------------------------------------------------------------------- [root@m ~]# mail ----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------- [root@m ~]# ls --format=single-column -F /boot config-3.10.0-514.el7.x86_64 <--此版本核心被编译时选择地功能与模块配置文件 extlinux/ grub/ <--旧版grubl,不需要理会这个目录了 grub2/ <--就是开机管理程序grub2相关数据目录 initramfs-0-rescue-a336180ca7bf4b85bd11a99fd1457e01.img <--底下几个为虚拟机文件系统档!这一个是用来救援的! initramfs-3.10.0-514.el7.x86_64.img <--正常开机会用到的虚拟文件系统 initramfs-3.10.0-514.el7.x86_64kdump.img <--核心功能出问题时会用到的虚拟文件系统 initrd-plymouth.img symvers-3.10.0-514.el7.x86_64.gz System.map-3.10.0-514.el7.x86_64 <--核心功能放置到内存地址的对应表 vmlinuz-0-rescue-a336180ca7bf4b85bd11a99fd1457e01* <--救援用的核心文件 vmlinuz-3.10.0-514.el7.x86_64* <--就是核心文件 最重要 ---------------------------------------------------------------------------------------------------------- Linux核心是可以透过动态加载核心模块的(想成驱动程序即可),这些核心模块就放置在 /lib/modules/ 目录内。 ---------------------------------------------------------------------------------------------------------- 由于模块放置到磁盘根目 录内 (要记得 /lib 不可以与 / 分别放在不同的 partition !), 因此在开机的过程中核心必须要挂载 根目录,这样才能够读取核心模块提供加载驱动程序的功能。 而且为了担心影响到磁盘内的文件系 统,因此开机过程中根目录是以只读的方式来挂载 ----------------------------------------------------------------------------------------------------------
boot loader 可以加载 kernel 与 initramfs ,然后在内存中让 initramfs 解压缩成为根目 录, kernel 就能够藉此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系 统,就能够开始后续的正常开机流程 ---------------------------------------------------------------------------------------------------------- CentOS 7.x 的 initramfs 文件内容 ---------------------------------------------------------------------------------------------------------- [root@m ~]# lsinitrd /boot/initramfs-3.10.0-514.el7.x86_64.img ---------------------------------------------------------------------------------------------------------- Image: /boot/initramfs-3.10.0-514.el7.x86_64.img: 30M ======================================================================== Early CPIO image ======================================================================== drwxr-xr-x 3 root root 0 Jun 8 08:53 . -rw-r--r-- 1 root root 2 Jun 8 08:53 early_cpio drwxr-xr-x 3 root root 0 Jun 8 08:53 kernel drwxr-xr-x 3 root root 0 Jun 8 08:53 kernel/x86 drwxr-xr-x 2 root root 0 Jun 8 08:53 kernel/x86/microcode -rw-r--r-- 1 root root 97280 Jun 8 08:53 kernel/x86/microcode/GenuineIntel.bin ======================================================================== Version: dracut-033-463.el7 。。。以下省略。。。 ----------------------------------------------------------------------------------------------------------
命令6 centos 7