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

相关推荐
pk_xz12345618 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强21 分钟前
Linux之sed命令详解
linux·运维·服务器
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
dayouziei3 小时前
java的类加载机制的学习
java·学习
云飞云共享云桌面4 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
dsywws7 小时前
Linux学习笔记之vim入门
linux·笔记·学习
晨曦_子画7 小时前
3种最难学习和最容易学习的 3 种编程语言
学习