第八章Linux系统管理 Linux服务管理

第八章Linux系统管理

Linux服务管理

概述

Linux系统的服务,又称为daemon,是指常驻在内存中持续运行,以提供所需服务(系统或网络服务)的进程。简单的说,就是程序启动后就会持续在后台执行,等待用户或者其他软件调用使用。

首先服务也是一种程序,但它是一种比较特殊的程序:服务实在系统后台运行,并等待用户或其他软件调用的一类特殊程序。

在red hat7中所有的服务最后都要d,是daemon守护的意思。比如vsftpd等等。

8.1 系统初始化进程system

初始化进程是Linux系统启动时第一个被执行的程序,它需要杜泽启动并管理其他各种服务。Systwm进程的PID永远为1。

Pstree 进程树

 

Systemd核心概念

Unit
表示不同类型的sytemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket、保存的系统快照以及其他与init相关的信息

配置文件:
/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于之前的/etc/initd.d
/run/system/system:系统执行过程中所产生的服务脚本,比上面的目录优先运行
/etc/system/system:管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行,在三者之中,此目录优先级最高


    在red hat7之前版本中初始化进程时init,从red hat开始,正式采用了全新的systemd初始化进程。比之前的init,有以下几个方面的明显优势。

优势一 ,系统启动时采用并发启动机制。之前init是按照顺序去启动每一项服务,但是有些服务之间没有依赖关系。现在的CPU都是多核心的,操作系统可以并行处理任务,systemd就实现了让那些不存在依存关系的服务同时并行启动的能力,大大加快了系统启动的速度。

优势二,systemd提供了按需启动服务的能力。

 

Unit 单元

对于systemd而言,他有一个核心概念为unit(单元),systemd的系统管理功能主要就是通过各种unit来实现的。每个unit都有一个相对应的配置文件对其进行标识和配置,这些配置文件主要存放在/usr/lib/systemd/system和/etc/system/system:中。这类unit的配置文件通常都以.service作为后缀。

主要在/usr/lib/systemd/system目录中

例如sshd.service服务配置文件

 

root@Redhat7 system]# ll sshd.service

-rw-r--r--. 1 root root 361 9月  25 2015 sshd.service

[root@Redhat7 system]# cat sshd.s

sshd.service  sshd.socket  

[root@Redhat7 system]# cat sshd.s

sshd.service  sshd.socket  

[root@Redhat7 system]# cat sshd.service

 

 

Unit类型

systemctl -t help :查看unit类型

service unit:文件扩展名为.service,用于定义系统服务

target unit:文件扩展名为.target,用于模拟实现“运行级别”

device unit: .device,用于定义内核识别的设备

mount unit :.mount,定义文件系统挂载点

socket unit :.socket,用于标识进程间通信用的socket文件,也可以在系统启动时,延迟启动服务,实现按需启动

snapshot unit:.snapshot,关系系统快照

swap unit:.swap,用于表示swap设备

automount unit:.automount,文件系统的自动挂载点如:/misc目录

path unit:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如spool目录

time:.timer由systemd管理的计时器

注:使用systemctl控制单元时,通常需要使用单元文件的全名,包括扩展名,但是有些单元可以在systemctl中使用简写方式,如果无扩展名,systemctl默认把扩展名当做.service。例如netcfg和netcfg.service是等同的挂载点会自动转化为相应的.mount单元,例如/home等价于home.mount设备会自动转化为相应的.device单元,所以/dev/sd2等价于dev-sda2.device

 

8.2 systemctl管理服务

在redhat5和redhat6系统中服务管理主要是通过service和chkconfig命令完成的,在redhat7中主要是通过system中的systemctl工具来对服务进行管理。

Systemctl start|stop|status|restart|reload 服务名

         开始-关闭-状态-重启-不重启加载配置

 

System将系统中的每个服务都看作一个服务单元service unit,在服务的名称后面加service作为后缀。在利用systemctl命令对服务进行管理时,服务名称后面是否加.service后缀均可。

 

8.2.1管理单个 unit

systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:
systemctl [command] [unit]
command 主要有:
start:立刻启动后面接的 unit。
stop:立刻关闭后面接的 unit。
restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的 unit 会被启动。
disable:设置下次开机时,后面接的 unit 不会被启动。

Is-enable:查看服务是否开机启动。
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。

mask:注销 unit,注销后你就无法启动这个 unit 了。
unmask:取消对 unit 的注销。
 

[root@Redhat7 system]# systemctl status sshd.service

● sshd.service - OpenSSH server daemon

   Loaded: loaded (/usr/lib/systemd/system/sshd.service(配置文件所在位置); enabled(开机自动启动); vendor preset: enabled)

   Active: active (running) since 二 2019-08-27 20:55:37 CST; 2h 31min ago

8.2.2 通过systemctl查看系统上所有的服务

  查看所有的单元

systemctl list-units

查看运行的service服务

systemctl list-units --type=service

查看所有的service服务

systemctl list-units --type=service --all
 

8.4 redhat7 程序开机启动

8.4.1 /etc/rc.d/rc.local方式

 

 

/etc/rc.d/rc.local是系统启动最后开始的步骤

 

 

查看命令在什么文件夹上面

rc.local

[root@jsmongodb ~]# which mongod

/app/mongodb3.0/bin/mongod

 

在centos7中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的,执行下面的命令可以文件标记为可执行的文件

chmod +x /etc/rc.d/rc.local

 

[root@jsmongodb ~]# vim /etc/rc.d/rc.local   

 

touch /var/lock/subsys/local

/app/mongodb3.0/bin/mongod -f /root/mongodbconf/mongodb3.0_primary.conf

 

8.4.2   centos7中 chkconfig

一、添加开机自启服务

在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例):

systemctl enable jenkins.service #设置jenkins服务为自启动服务

sysstemctl start  jenkins.service #启动jenkins服务

二、添加开机自启脚本

在centos7中增加脚本有两种常用的方法,以脚本autostart.sh为例:

#!/bin/bash

#description:开机自启脚本

/usr/local/tomcat/bin/startup.sh  #启动tomcat

方法一chkconfig

1、赋予脚本可执行权限(/opt/script/autostart.sh是你的脚本路径)

chmod +x /opt/script/autostart.sh

2、打开/etc/rc.d/rc/local文件,在末尾增加如下内容

/opt/script/autostart.sh

3、在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限

chmod +x /etc/rc.d/rc.local

重点方法二

1、将脚本移动到/etc/rc.d/init.d目录下

mv  /opt/script/autostart.sh /etc/rc.d/init.d

2、增加脚本的可执行权限

chmod +x  /etc/rc.d/init.d/autostart.sh

3、添加脚本到开机自动启动项目中

cd /etc/rc.d/init.d

chkconfig --add autostart.sh

chkconfig autostart.sh on

8.5 Linux计划任务管理

在Linux操作系统中,除了用户即时执行的操作命令外,还可以配置在指定的时间,指定的日期执行预先计划的系统管理任务(如定期备份、定期采集检测数据)。CentOS系统默认已安装了at、cronie软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,分别通过at、crontab命令进行计划任务设置。at一次性任务设置,crontab周期性的任务设置。

按照预先设置的时间周期(分钟、小时、日期、月份、星期)重复执行用户指定的命令操作。
主要设置文件:
全局配置文件,位于“/etc/crontab”;
系统默认的设置,位于目录“/etc/cron./”;
用户定义的设置,位于文件"/var/spool/cron/用户名"
使用crontab命令管理用户的计划任务,常用的选项有:
-e:编辑计划任务列表;
-l:列表显示计划任务;
-r:删除计划任务列表。

8.5.1 at配置一次性计划任务

at (选项)(参数)

ctrl+D 结束at命令的输入

at 的删除键在交互模式下不能用,只能按住tab加删除键可以用。

1 at指定时间的方法:

● 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
    ● 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
    ● 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm
    常用 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009-03-1
    常用 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm + 3 days
    ● 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

 

2 相关命令

    1)at:在特定的时间执行一次性的任务;

    2)atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号、日期、小时、队列和用户名; at -l

    3)atrm:根据job number删除at任务;at –m

4)batch:在系统负荷允许的情况下执行at任务,就是在系统空闲的情况下才执行at任务。

 

at 参数

-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出

-I atq的别名. atq命令可以查看系统中等待的作业

-d atrm的别名. atrm命令可以删除系统中的等待作业,后面加上要删除的作业id

常用  -v 显示任务将被执行的时间

常用 -c 打印任务的内容到标准输出

-V 显示版本信息

-q<列队> 使用指定的列队

-f<文件> 从指定文件读入任务而不是从标准输入读入

-t<时间参数> 以时间参数的形式提交要运行的任务

3 事例

1 2019-09-01 23:11把时间输出到syj.txt

[root@Redhat7 ~]# at 23:11 2019-09-01

at> date>/syj222.txt

at> <EOT>

job 6 at Sun Sep  1 23:11:00 2019

2 查看是否有任务

[root@Redhat7 ~]# atq

6       Sun Sep  1 23:11:00 2019 a root

3 删除任务

[root@Redhat7 ~]# atrm 6

4 查看任务内容

[root@Redhat7 ~]# at -c 6

${SHELL:-/bin/sh} << 'marcinDELIMITER7f5b2a11'

date>/syj222.txt

5 执行成功

[root@Redhat7 ~]# cat /syj222.txt

2019年 09月 01日 星期日 23:11:00 CST

 

8.5.2 cron周期性计划任务

cron--服务名;cron--linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似;crontab--是定制好的计划任务表

1 cron命令参数

crontab [-u user] file

        crontab [-u user] [ -e | -l | -r ]

                (default operation is replace, per 1003.2)

        -e      (edit user's crontab)

        -l      (list user's crontab)

        -r      (delete user's crontab)

        -i      (prompt before deleting user's crontab)

        -s      (selinux context)

   常用  -e 修改与创建任务

         -l 查看任务

         -r 删除任务

2 cron格式

 

 

  *   *  *  *  *  command
  分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令
  第1列表示分钟1~59 每分钟用*或者 */1表示
  第2列表示小时1~23(0表示0点)
  第3列表示日期1~31
  第4列表示月份1~12
  第5列标识号星期0~7(0和7表示星期天)
  第6列要运行的命令

星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

 

3 cron实例

1 cron 与重定向

错误

11 21 * * *  /usr/bin/date  >/syj2222.txt   每天21:11 执行命令,/usr/bin/date命令必须是绝对路径

[root@Redhat7 ~]# cat /syj2222.txt (空)

[root@Redhat7 ~]#   (空)

 

 

正常

[root@Redhat7 ~]# cat /sh/date.sh

#!/bin/bash

/usr/bin/date >/syj2222.txt

 

[root@Redhat7 ~]# chmod +x /sh/date.sh         

[root@Redhat7 ~]# ll /sh/date.sh      

-rwxr-xr-x 1 root root 40 9月   2 21:35 /sh/date.sh

 

49 21 * * * /usr/bin/bash /sh/date.sh  OK

03 22 * * * /sh/date.sh               OK

 

03 22 * * 1 /sh/date.sh               OK  每周1,22点03份执行

30 10-23/2 * * * /sh/date.sh            OK 从10:30开始,每隔2小时执行一次。

30 10-23/2 * * 1-5 /sh/date.sh            OK 周一到周五,10:30开始,至23点,每隔2小时执行一次。

*  */2 * * 1-5 /sh/date.sh            OK 周一到周五,每隔2小时执行一次。

 

  1. cron 容易出错的地方

最小一位不能为*

* 22 * * * /sh/date.sh     每天22点开始每分钟执行一次  错误

0  22 * * * /sh/date.sh    每天22点开始执行一次       正确

0  */3  * * * /sh/date.sh    每天0点开始,每隔3小时执行一次       正确

 

 

5 cron查看任务

[root@Redhat7 ~]# crontab -l

03 22 * * * /sh/date.sh

8.5.3 cron事例

 

实例 1 每天23:05 开启sshd服务,23:07关闭sshd服务。

1 [root@Redhat7 ~]# crontab -l

05 23 * * * /usr/bin/systemctl start sshd

07 23 * * * /usr/bin/systemctl stop sshd

 

[root@Redhat7 ~]# systemctl status sshd

Active: inactive (dead)

1 成功

[root@Redhat7 ~]# systemctl status sshd

  Active: active (running)

2 成功

[root@Redhat7 ~]# systemctl status sshd

Active: inactive (dead)

 

 

实例 2 每隔5天23点清空一次/var/ftp/pub中的数据。

14 23 */5 * * /usr/bin/rm  -rf /var/ftp/pub/*

 

实例3 每周一的23:20关闭sshd服务

20 23 * * 1 /usr/bin/systemctl stop sshd

 

实例4 周1,3,5的17:30,使用tar命令自动备份/etc/http目录

26  23  *  *  1,3,5  /usr/bin/tar  -zcf  /http.tar.gz  /etc/http

 

8.5.4 cron+%时间

 

%在cron计划任务中有特殊用途,如果要在计划任务的命令中使用%,则需要使用\%的形式进行转义,或者是将%放置于单引号中。

实例1 周1,3,5的23:40,使用tar命令自动备份/etc/http年月日-目录加日期

[root@Redhat7 ~]# date +%F

2019-09-02

 

26  23  *  *  1,3,5  /usr/bin/tar  -zcf  /http-$(date +%F).tar.gz  /etc/http

空文件

 

 

40  23  *  *  1,3,5  /usr/bin/tar  -zcf  /http-$(date +\%F).tar.gz  /etc/http

[root@Redhat7 ~]# crontab -l

40  23  *  *  1,3,5  /usr/bin/tar  -zcf  /http-$(date +\%F).tar.gz  /etc/http

 

成功OK

[root@Redhat7 ~]# ll /http-2019-09-02.tar.gz

-rw-r--r-- 1 root root 45 9月   2 23:42 /http-2019-09-02.tar.gz

 

8.5.5 系统层面设置计划任务

[root@Redhat7 ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

 

# For details see man 4 crontabs

 

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name  command to be executed

发布了37 篇原创文章 · 获赞 0 · 访问量 2406

猜你喜欢

转载自blog.csdn.net/syjhct/article/details/100164559