linux服务 学习

服务(Service)

在Linux操作系统中,服务(Service)是一个基本概念,它通常指的是运行在后台的、持续提供特定功能或资源给系统内部组件或者网络上的客户端程序。

这些服务是系统正常运行和提供各种功能的关键组成部分,它们可以按照预定义的启动顺序自动加载,并在整个系统运行期间保持活动状态。

常见的Service
系统基础服务:

systemd:现代Linux发行版普遍采用的初始化系统,负责启动、停止和管理系统中的各种服务及进程。

cron 或 anacron:定时任务调度服务,用于按照预定时间执行命令或脚本。

syslog 或 rsyslog:日志记录服务,收集并管理系统的各种日志信息。

networking 或 network-manager:网络配置与管理服务,负责系统网络接口的启动和连接设置。

网络服务:

sshd:安全外壳(SSH)服务器,提供远程登录、文件传输等功能。

httpd 或 nginx:Web服务器,用于托管网站内容和服务HTTP请求。

dhcpd:动态主机配置协议(DHCP)服务器,自动分配IP地址给局域网内的客户端设备。

bind 或 dnsmasq:域名系统(DNS)服务器,处理域名解析请求。

smtpd(例如Postfix或Exim):邮件发送服务,实现电子邮件的发送功能。

数据库服务:

mysqld 或 mariadb-server:MySQL或MariaDB数据库服务器。

postgresql:PostgreSQL数据库服务器。

mongodb:MongoDB文档型数据库服务器。

文件共享服务:

nfs-server:网络文件系统(NFS)服务器,允许网络中的其他计算机通过网络挂载并访问本地文件系统。

samba:SMB/CIFS文件共享服务,支持Windows和其他操作系统之间的文件和打印共享。

身份验证与授权服务:

ldap 或 slapd:轻量级目录访问协议(LDAP)服务器,用于集中式用户和组账户管理。

krb5 或 kdc:Kerberos身份验证服务,提供网络安全认证。

虚拟化服务:

libvirtd 或 virt-manager:基于libvirt的虚拟机管理工具及相关服务。

容器管理服务:

docker:流行的容器引擎,用于部署和运行应用程序的容器化环境。

containerd 或 cri-o:容器运行时环境服务,为容器提供底层支持。

监控与性能分析:

snmpd:简单网络管理协议(SNMP)守护程序,提供网络设备状态监测。

prometheus 或 node_exporter:监控与警报系统,收集并展示系统和应用指标。

安全相关服务:

firewalld 或 iptables:防火墙服务,控制进出系统的网络流量。

fail2ban:防止恶意登录尝试的安全工具。

uwsgi 或 apache mod_wsgi:Web应用服务器中间件,用于托管Python等语言编写的Web应用程序。

Linux服务特点:

持久性:服务通常是长期运行的,不会因为用户注销或终端会话结束而停止运行。

后台运行:服务不依赖于用户的交互操作,它们在后台作为守护进程(Daemon)执行。

系统核心功能支持:一些服务直接与内核相关联,比如网络服务、文件系统服务、打印服务等,它们确保了系统的基础设施正常运作。

管理与控制:Linux系统通过init系统(如Systemd、SysV init或其他init替代品)来管理和控制服务的启动、停止、重启以及查看其运行状态等。

延伸:服务单元分类
Service命令

在Linux系统中,服务的配置文件通常放在/etc/init/或者/etc/init.d/目录下,具体取决于你的系统使用的是Upstart还是Systemd。

对于Systemd(现代Linux系统的初始化系统),服务单元通常有.service扩展名,例如sshd.service。这些.service文件存放在/etc/systemd/system/目录。

对于Upstart(早期Ubuntu系统使用的初始化系统),服务脚本通常有.conf扩展名,例如ssh.conf。Upstart的配置文件存放在/etc/init/目录。

作用:service命令可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

1.格式:service <service>

打印指定服务<service>的命令行使用帮助。

2.格式:service <service> start

启动指定的系统服务<service>

3.格式:service <service> stop

停止指定的系统服务<service>

4.格式:service <service> restart

重新启动指定的系统服务<service>,即先停止(stop),然后再启动(start)。

5.格式:chkconfig --list

查看系统服务列表,以及每个服务的运行级别。

6.格式:chkconfig <service> on

设置指定服务<service>开机时自动启动。

7.格式:chkconfig <service> off

设置指定服务<service>开机时不自动启动。

8.格式:ntsysv

以全屏幕文本界面设置服务开机时是否自动启动。

  1. 查看系统服务的状态:

service --status-all

chkconfig命令

chkconfig是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。

chkconfig可以更新(启动或停止)和查询系统服务(service)运行级信息。更简单一点,chkconfig是一个用于维护/etc/rc[0-6].d目录的命令行工具。

chkconfig 是一个用来管理 Red Hat 及其衍生系统如 CentOS 中的启动项的命令行工具。如果你的系统中没有 chkconfig 命令,可能是因为你使用的是基于 Debian 的系统(如 Ubuntu),在这种系统中通常使用 update-rc.d 命令来管理启动项.

设置service开机是否启动:

chkconfig name on/off/reset

on表示开启,off表示关闭,reset表示重置。

设置service运行级别

chkconfig --level levels

等级0表示:表示关机

等级1表示:单用户模式

等级2表示:无网络连接的多用户命令行模式

等级3表示:有网络连接的多用户命令行模式

等级4表示:不可用

等级5表示:带图形界面的多用户模式

等级6表示:重新启动

列出service启动信息

chkconfig --list [name]

如果不指定name,会列出所有services的信息

chkconfig [--add][--del][--list][系统服务]

chkconfig --add <名称>

chkconfig --del <名称>

--add增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

--del删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。

systemctl 命令

systemctl 是一个用于检视和控制 systemd 系统和服务管理器的命令行工具。systemd 是用于启动、停止和管理 Linux 系统中的服务的守护进程。

systemd配置目录有以下三种

/usr/lib/systemd/system/:每个服务最主要的启动脚本设置,该目录存放软件默认的配置,不建议修改

/run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先级要比

/usr/lib/systemd/system/ 高

/etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本,执行优先级又比 /run/systemd/system/ 高

因此用户自定义的服务、修改的配置文件一般放在/etc/systemd/system/目录

/etc/systemd/system/目录下存放的是需要开机执行的服务,该目录下有大量的链接文件,链接到/usr/lib/systemd/system/目录下,该目录下的文件才是systemd实际启动的服务脚本文件。可通过ll命令查看,即/etc/systemd/system/存放的是链接快捷方式,/usr/lib/systemd/system/才是实际启动的服务脚本

如:

以vsftpd.service为例,如果要对其进行修改,可以在以下目录中进行操作。

/usr/lib/systemd/system/vsftpd.service:官方的默认配置文件;/etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上 .d 的扩展名。然后在该目录下创建配置文件即可。配置文件后缀最好为 .conf 。该目录下的文件会附件进入/usr/lib/systemd/system/vsftpd.service

/etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是启动了 vsftpd.service 之后,最好再启动这目录下面建议的服务。/etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是在启动 vsftpd.service 之前,需要事先启动哪些服务的意思。

systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起

格式:systemctl [OPTIONS] COMMAND [UNIT]

OPTIONS: 可选参数,用于指定 systemctl 的行为。

COMMAND: 必需参数,用于执行特定的 systemd 命令,例如启动、停止或重新启动服务。

UNIT: 可选参数,用于指定要操作的服务或单元。

常用选项

-H, --host: 指定要在远程主机上运行的 systemd 实例的主机名或 IP 地址。

-a, --all: 显示所有已加载的单位,而不仅仅是当前活动的单位。

-t, --type: 根据指定的单元类型筛选单元列表。支持的单元类型包括 service、socket、mount 等。

-u, --user: 执行与当前用户相关联的用户级服务。

常见的命令:

  1. 列出所有可用单元:

systemctl list-unit-files

  1. 检查某个单元是否开机自启动:

systemctl is-enabled 服务名

  1. 检查某个服务的运行状态

systemctl status 服务名

Loaded:该行表示此服务是否会开机启动,Loaded有如下:

  1. enabled:这个 服务将在开机时被执行
  2. disabled:这个 daemon 在开机时不会被执行
  3. static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled的服务来唤醒
  4. mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。
  5. vendor preset表示第一次安装时的预设值。

Active:现在这个服务单元的状态是正在执行 (running) 或没有执行 (dead)。如下

  1. active (running):正有一只或多只程序正在系统中执行的意思

  2. active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。

  3. active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。

  4. inactive:这个服务目前没有运行。

  5. 列出所有服务:

systemctl list-unit-files --type=service

  1. 启动,停止,重启、重新加载服务配置服务

systemctl start 服务名

systemctl stop 服务名

systemctl restart 服务名 //重启服务

systemctl reload 服务名 //reload是在不重启服务的情况下重新加载配置文件

  1. 查询服务是否激活

systemctl is-active 服务名

  1. 配置是否开机自启动

systemctl disable 服务名 //开机不启动

systemctl enable 服务名 //开机启动

  1. 使用systemctl命令杀死服务

systemctl kill 服务名

列出指定服务的所有依赖项和服务间的启动顺序关系

systemctl list-dependencies 服务名

如:systemctl list-dependencies ssh.service

查看哪些服务的运行依赖于本服务

systemctl list-dependencies 服务名 --reverse

如:systemctl list-dependencies ssh.service --reverse

  1. 重新加载Systemd配置

systemctl daemon-reload

命令参数 参数说明

start 立刻启动后面接的unit

stop 立刻关闭后面接的unit

restart 立刻关闭后启动后面接的unit,亦即执行stop再start的意思

reload 不关闭后面接的unit的情况下,重载配置文件,让设定生效

enable 设定下次开机时,后面接的unit会被启动

disable 设定下次开机时,后面接的unit 不会被启动

status 目前后面接的这个unit 的状态,会列出是否正在执行、是否开机启动等信息。

is-active 目前有没有正在运行中

is-enable 开机时有没有预设要启用这个unit

kill 不要被kill这个名字吓着了,它其实是向运行unit的进程发送信号

show 列出unit的配置。

mask 注销unit,注销后你就无法启动这个unit了

unmask 取消对unit的注销

list-units 依据unit列出目前有启动的unit。若加上--all才会列出没启动的。(等价于无参数)

list-unit-files 列出所有以安装unit以及他们的开机启动状态(enabled、disabled、static、mask)。

--type=TYPE 就是unit type,主要有service,socket,target等

get-default 取得目前的 target

set-default 设定后面接的 target 成为默认的操作模式

isolate 切换到后面接的模式

编写.service

.service文件通常由三部分组成:

[Unit]: 定义与Unit类型无关的通用选项;用于提供unit的描述信息,unit行为及依赖关系等。

[Service]:与特定类型相关的专用选项;此处为Service类型。

[Install]:定义由"systemctl enable"及"systemctl disable"命令在实现服务启用或禁用时用到的一些选项。

Unit段的常用选项

Description:描述信息,意义性描述;

After:定义unit的启动次序;表示当前unit应晚于哪些unit启动;其功能与Before相反;

Before:表示当前unit应先于哪些unit启动。

Requies:被依赖的units无法启动时,当前的unit即无法启动;

Wants:当前这个units启动后最好还要启动其他的units比较好。

Confilcts:定义units 的冲突关系;只能二选一启动。

Service段的常用选项

Type:用于定义影响ExecStart及相关参数的功能的unit进程类型;

类型有:

simple:默认值,指定ExecStart字段的进程为主进程

forking:开子进程执行, 原生父进程结束后就会终止子进程运行。

Oneshot:执行一次

Dbus:

Notify:启动后发送会发送通知信号通知systemd

Idle:等其他任务结束后才运行

EnvironmentFile:环境配置文件;

ExecStart:指明启动unit要运行的命令或脚本;ExecStart, ExecStartPost

ExecStop:指明停止unit要运行的命令或脚本;

Restart:

可选项 描述

no 退出后不会重启

on-success 当进程正常退出时(退出码为0) 执行重启

on-failure 当进程不正常退出时(退出码不为0) 执行重启

on-abnormal 当被信号终止和超时执行重启

on-abort 当收到没有捕捉到的信号终止时执行重启

on-watchdog 当看门狗超时时执行重启

always 一直重启

KillMode

可选项 描述

control-group 杀掉当前进程中所有的进程

Process 杀掉当前进程的主进程

Mixed 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号

None 不杀掉任何进程

TimeoutSec:此服务在启动或关闭时,因为某些原因无法顺利正常启动或结束,在等待多久进入强制结束的状态。

Install段的常用配置:

Alias:一个链接的,别名,

RequiredBy:依赖哪些unit;

WantBy:被哪些unit所依赖;一般是*.target unit

一般填为WantedBy=multi-user.target

例子:pgsql.service

[Unit]

Description=PostgreSQL database server

After=network.target

[Service]

Type=forking

User=postgres

Environment=PGSTARTTIMEOUT=200

Environment=PGDATA=/usr/local/pgsql/data

ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT}

ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast

ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s

TimeoutSec=500

[Install]

WantedBy=multi-user.target

自定义自启动服务

新建test.service并编辑服务单元文件内容

[Unit]

Description=test Service

After=network.target

[Service]

Type=simple

ExecStart=/root/study/test/test

Restart=always

[Install]

WantedBy=multi-user.target

把该test.service放到 /etc/systemd/system目录下

修改test.service的权限,使其可执行 chmod 777 test.service

在终端输入下面命令,使重新加载Systemd配置

sudo systemctl daemon-reload

设置开机自启动服务

sudo systemctl enable test.service

(可选)立即启动服务

sudo systemctl start test.service

相关推荐
无为之士几秒前
Linux自动备份Mysql数据库
linux·数据库·mysql
秋名山小桃子10 分钟前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉1213810 分钟前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
岑梓铭17 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉17 分钟前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei21 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
7yewh36 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi40 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试40 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk