【Linux | systemd】systemd(systemctl命令)运行服务的配置文件详解

这篇具有很好参考价值的文章主要介绍了【Linux | systemd】systemd(systemctl命令)运行服务的配置文件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【systemctl】让程序以守护进程的方式在后台运行

首先需要创建一个systemd unit 配置文件,比如:verdaccio.service,一般放在 /lib/systemd/system/ 下

添加配置如下:

[Unit]
Description=Verdaccio lightweight npm proxy registry

[Service]
Type=simple
Restart=on-failure
User=verdaccio
ExecStart=/usr/bin/verdaccio --config /etc/verdaccio/config.yaml

[Install]
WantedBy=multi-user.target

开机自启动:systemctl enable verdaccio.service

立即启动:systemctl start verdaccio.service

重新启动:systemctl restart verdaccio.service

运行状态:systemctl status verdaccio.service

前言:

        你有想过服务器上那么多服务在运行,它们都会怎样工作?服务是独立的个体,每个只管自己的死活,如果某个服务自己偷偷死了,会造成很严重的后果,且一种服务一种管理方式,这堆起来会累死老师傅的。

        所以,Linux的管理服务能力是个香馍馍,就一点都不奇怪了。文章来源地址: https://www.yii666.com/blog/347720.html

        linux 服务器主要的能力之一就是配置并管理系统上运行的各种服务程序。早初这种管理服务程序的能力就是由启动程序init系统负责的,随着Linux系统的迭代,早先的init系统已经由最初的sysvinit进化到了今天的systemd。

        所以,systemd作为init系统的启动程序,负责管理运行在系统上的众多服务,而systemd管理的手段并不难,只需要学会如何编写运行服务的配置文件,就可以轻松管理服务了。

一、.server服务配置文件信息详解

这是一个prometheus的服务进程:

(比如:/usr/lib/systemd/system目录下的nginx.service文件)

[Unit] 
Description=nginx - web server 
After=network.target remote-fs.target nss-lookup.target 

[Service] 
PIDFile=/opt/nginx/logs/nginx.pid 
ExecStartPre=/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf 
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf 
ExecReload=/opt/nginx/sbin/nginx -s reload 
ExecStop=/opt/nginx/sbin/nginx -s stop 
ExecQuit=/opt/nginx/sbin/nginx -s quit 
Type=forking
PrivateTmp=true 

[Install] 
WantedBy=multi-user.target

[Unit]     控制单元:主要给出服务描述、启动顺序和依赖关系

Description:       对该服务的描述;

Documentation:         服务的文档

After:        说明本unit是在哪个服务后启动。仅是说明服务启动的顺序而已,并没有强制要求。

Before :      与After的意义相反

Requires:       本unit需要在哪个服务启动后才能够启动!这里设置服务间的依赖性。如果在此项设置的前导服务没有启动成功,那么本 unit 就不会被启动!

Wants:      与Requires 刚好相反,规范的是这个unit之后还会启动什么服务,如果这Wants 后面接的服务如果没有启动成功,不会影响到这个unit本身!

Conflicts:         这个项目后面接的服务如果有启动,那么本unit就不能启动!(互斥性) 如果本unit启动了,则指定的服务就不能启动。

[Service]     服务:主要给出服务的启动行为,如何启动、重启、停止

EnvironmentFile:        服务的参数文件,形成$OPTIONS;

ExecStart:       就是实际执行此服务的程序。接受 “命令 参数 参数…” 的格式,不能接受 <, >, >>, |, & 等特殊字符,很多的 bash语法也不支持。所以,要使用这些特殊的字符时,最好直接写入到脚本里面去!

ExecStop:        用来实现systemctl stop命令,关闭服务。

ExecReload:      用来实现systemctl reload命令,重新加载服务的配置信息。

ExecStartPre:      启动服务之前执行的命令;

ExecStartPost:      启动服务之后执行的命令;

ExecStopPre:      停止服务之前执行的命令;

ExecStopPost:       停止服务之后执行的命令;

Type:        服务启动类型。默认simple表示ExecStart为主进程,notify类似于simple,启动结束后会发出通知信号。

Type扩展:

 Type:定义启动类型。它可以设置的值如下:
- simple:默认值,这个服务主要由ExecStart设置的程序来启动,启动后常驻于内存中
- forking:由ExecStart指定的启动的程序通过spawns产生子进程提供服务,然后父进程退出
- oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
- dbus:与simple类似,但这个服务必须要在取得一个D-Bus的名称后,才会继续运行!因此设置这个项目时,通常也要设置 BusName= 才行
- idle:与simple类似,意思是,要执行这个服务必须要所有的工作都顺利执行完毕后才会执行。这类的服务通常是开机到最后才执行即可的服务
- notify:与simple类似,但这个服务必须要收到一个sd_notify() 函数发送的消息后,才会继续运行

KillMode:       服务停止类型,默认control-group停止时杀死所有子进程,process只杀主进程,none只停止服务,不杀进程;

 KillMode扩展:文章来源地址https://www.yii666.com/blog/347720.html

 KillMode:定义 Systemd 如何停止 sshd 服务。它可以设置的值如下:
 -  control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
 -  process:只杀主进程
 -  mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
 -  none:没有进程会被杀掉,只是执行服务的 stop 命令

Restart:        服务重启类型,默认no不重启,on-success正常退出时重启,on-failure非正常退出时重启 

Restart扩展:

 Restart:定义了 sshd 退出后,Systemd 的重启方式。它可以设置的值如下:
 - no(默认值):退出后不会重启
 - on-success:只有正常退出时(退出状态码为0),才会重启
 - on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
 - on-abnormal:只有被信号终止和超时,才会重启
 - on-abort:只有在收到没有捕捉到的信号终止时,才会重启
 - on-watchdog:超时退出,才会重启
 - always:不管是什么退出原因,总是重启

注意:对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

RestartSec:        间隔多久重启服务。 例如RestartSec=42s

TimeoutSec:       若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利 “正常启动或正常结束” 的情况下,则我们要等多久才进入 “强制结束” 的状态!

RemainAfterExit:       当设置为 RemainAfterExit=1 时,则当这个服务所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助!

Environment:        配置环境变量

[Service]
Environment="GODEBUG='madvdontneed=1'"
Environment="BEAT_LOG_OPTS=-e"
Environment="BEAT_CONFIG_OPTS=-c /etc/v_filebeat.yml"
Environment="BEAT_PATH_OPTS=-path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/data -path.logs /var/log/logs"

 EnvironmentFile:       通过文件的方式设置环境变量

[Service]
EnvironmentFile=/testenv

可以在testenv文件上以shell命令书写变量声明: 

GODEBUG='madvdontneed=1'
BEAT_LOG_OPTS=-e
BEAT_CONFIG_OPTS=-c /etc/v_filebeat.yml
BEAT_PATH_OPTS=-path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/data -path.logs /var/log/logs

接下来可以在 ExecStart 配置中使用在文件中设置的环境变量。 

user:        可以设置服务的用户名 

[Install]      安装部分:主要说明如何安装这个配置文件,把该 unit 安装在哪个 target上,做到开机自启

WantedBy:        这个设置后面接的大部分是 *.target unit。意思是,这个unit本身该附挂在哪个 target unit下面

 Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是服务所在的Target是multi-user.target,对应的路径在/etc/systemd/system/multi-user.target.wants下。使用systemctl enable,进行创建符号连接会识别到[Install]字段的内容进行安装

 Systemd 有默认的启动 Target。就是multi-user.target,在这个组里的所有服务,都将开机启动。

Also:         当目前这个unit被enable时,Also 后面接的unit也要enable的意思

Alias:       当systemctl enable相关的服务时,则此服务会进行链接文件的创建!默认开启!

————————————————————————————————————————

注意:配置文件,第二行ExecStart设为空值,等于取消了第一行的设置
所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

========================================================================

二、系统的.target的文件信息详解

查看系统的target配置命令:
systemctl cat multi-user.target

比如:/etc/systemd/system目录下的default.target文件)

[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

注意,Target 配置文件里面没有启动命令。

上面输出结果中,主要字段含义如下。

Requires:        要求basic.target一起运行。

Conflicts:冲突字段。如果rescue.service或rescue.target正在运行,multi-user.target就不能运行,反之亦然。

After:     表示multi-user.target在basic.target 、 rescue.service、 rescue.target之后启动,如果它们有启动的话。

AllowIsolate:        允许使用systemctl isolate命令切换到multi-user.target。

=======================================================================

三、使用 systemctl status xxxx 的状态信息详解

用systemctl status命令查看一下该服务的状态。

比如:systemctl status nginx

打印出的信息有如下部分:

● nginx.service - nginx - web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2022-10-09 21:47:15 CST; 3 days ago
 Main PID: 994 (nginx)
   CGroup: /system.slice/nginx.service
           ├─994 nginx: master process /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
           ├─998 nginx: worker process
           └─999 nginx: worker process

10月 09 21:47:15 localhost.localdomain systemd[1]: Starting nginx - web server...
10月 09 21:47:15 localhost.localdomain nginx[972]: nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok


上面的输出结果含义如下。

Loaded:        配置文件的位置,是否设为开机启动,disabled代表启用

Active:        active (running) 表示正在运行

Main PID:       主进程ID

CGroup:        应用的所有子进程,三个nginx进程

日志块:       应用的日志文章来源地址https://www.toymoban.com/news/detail-798427.html

到了这里,关于【Linux | systemd】systemd(systemctl命令)运行服务的配置文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 管理 Systemd 服务的命令行工具

    systemctl 是用于管理 Systemd 服务的命令行工具。下面是一些常用的 systemctl 命令及其功能: 1. `systemctl enable service`:启用一个服务,使其在系统启动时自动启动。 2. `systemctl start service`:启动一个服务。 3. `systemctl stop service`:停止一个服务。 4. `systemctl restart service`:重新启动一

    2024年01月16日
    浏览(25)
  • Ubuntu开机自启服务systemd.service配置教程(Ubuntu服务)(Linux服务)upstart(systemd教程)

    我们在linux系统下启动一个程序,一般用一条命令,或者执行一个脚本就行了,那么,为什么还要将程序配置成服务?这样做有什么好处? 1. 自动启动 配置成服务后,程序将在系统启动时自动启动,无需手动操作。这样可以确保程序在系统重启后能够自动运行,避免因为人为

    2024年02月05日
    浏览(31)
  • SELinux、SELinux运行模式、破解Linux系统密码、firewalld防火墙介绍、构建基本FTP服务、systemd管理服务、设置运行模式

    作用:负责域名解析的服务器,将域名解析为IP地址 /etc/resolv.conf:指定DNS服务器地址配置文件 ip命令(Linux最基础的命令) 1.查看IP地址 2.临时添加IP地址 3.删除临时IP地址 ping 命令,测网络连接 -c 指定ping包的个数 •常见的日志文件 /var/log/messages 记录内核消息、各种服务的公

    2024年01月18日
    浏览(35)
  • Ubuntu开机自启服务systemd.service配置教程(Ubuntu服务)(Linux服务)upstart

    我们在linux系统下启动一个程序,一般用一条命令,或者执行一个脚本就行了,那么,为什么还要将程序配置成服务?这样做有什么好处? 1. 自动启动 配置成服务后,程序将在系统启动时自动启动,无需手动操作。这样可以确保程序在系统重启后能够自动运行,避免因为人为

    2024年02月12日
    浏览(35)
  • linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

    1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 -t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口号,而不是以服务名称显示 通过管道符号|将netstat的输出结果传递给grep命令,用于过滤出包含指定端口号的行。 执行命令后,终端

    2024年02月04日
    浏览(47)
  • systemctl命令详解

    systemctl 命令详解 systemctl 是linux方便管理一系列服务的命令 启动/重启/查看状态 开启/关闭开机自启动 查看服务是否已启动 只重启正在运行中的服务 查看服务是否为开机自启动 显示所有的服务状态—(翻页:按空格,退出:输入q) 查看启动成功的服务列表 查看启动失败的

    2024年02月09日
    浏览(28)
  • systemctl命令和配置整理

    systemctl主要负责控制systemd系统和服务管理器。在ubuntu 、centos等一系列发行版中可用。可以方便的管理需要启动的服务等。可以实现开机自启动、出错重启和定时重启等等功能。 下面有一个是错误的,正确为 systemctl daemon-reload #系统命令重新加载 下面是详细的 本文件一共有三

    2024年02月07日
    浏览(38)
  • 【Linux】使用systemd设置开机自启动命令

    systemd是Linux系统中现代化的初始化系统,可以使用它来实现开机自动运行命令。在systemd中,可以通过创建一个service文件,把要执行的命令放在其中,然后将其添加到systemd的自启动项中。 具体操作步骤如下: 首先在终端中使用sudo权限创建一个.service文件,用于存储service配置

    2024年02月08日
    浏览(65)
  • 【Linux】Shell命令运行原理和权限详解

    tar指令(重要): 打包/解包,不打开它,直接看内容 语法:tar [-cxtzjvf] 文件与目录 … 参数: 常用的为: (1)-c :建立一个压缩文件的参数指令(create 的意思); (2)-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩 (3)-f :使用档名,请留意,在 f 之后要立即接

    2024年03月14日
    浏览(95)
  • 【Linux -- systemctl管理服务】

    systemctl : 列出系统上所有启动的unit systemctl list-unit-files : 列出所有已安装的unit systemctl list-units --type=service --all : 列出所有service类别的deamon,并且启没启动都列出来 systemd也提供了几个简单的命令给我们切换模式: 在看看谁会用到multi-user.target呢? 本节主要介绍了关于 systemctl 管理

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包