当前位置:首页 > 技术文章 > 正文内容

Linux新手入门系列:systemctl服务service文件配置详解

arlanguage5个月前 (12-20)技术文章33

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。

注意:

Linux下区分大小写;
Linux多用户多线程;
Linux下每个文件和目录都有访问权限;

systemctl服务service文件配置详解

#systemd服务#、#systemd服务service文件配置详解#、#systemd服务配置详解#
本文列出了常见的配置项说明,这里我们以nginx.service为例,查看nginx

# systemctl cat nginx.service

内容如下

#service配置文件分为[Unit]、[Service]、[Install]三个部分。

#[Unit]部分:指定服务描述、启动顺序、依赖关系,包括Description、Documentation、After、Before、Wants、Requires。
[Unit]
#Description指定当前服务的简单描述。
Description=nginx代理服务

#Documentation指定服务的文档,可以是一个或多个文档的URL,可选,一般不用配置该项。
Documentation=http://nginx.org/en/docs

#启动顺序,After和Before。
#注意,After和Before字段只涉及启动顺序,不涉及依赖关系。

#After表示当前服务在network.target之后启动,可以指定多个服务,以空格隔开。
After=network.target sshd.service
After=sshd-keygen.service

#Before表示当前服务在tomcat.target之前启动,可以设置多个,以空格隔开,可选,根据实际需要配置。
Before=tomcat.service

#依赖关系,Wants和Requires,可选,根据实际需要配置。
#Wants为"弱依赖"关系,即如果"mysqld.service"启动失败或停止运行,不影响nginx.service继续执行。
#Requires为"强依赖"关系,即如果"mysqld.service"启动失败或异常退出,那么nginx.service也必须退出。
#想要添加多个服务,可以多次使用此选项,也可以设置一个空格分隔的服务列表。
#注意,Wants与Requires只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
Wants=mysqld.service
Requires=mysqld.service

#[Service]部分:指定启动行为,包括Type、EnvironmentFile、ExecStart、ExecReload、ExecStop、PrivateTmp。
[Service]
#Type指定服务的启动类型,必须为simple, exec, forking, oneshot, dbus, notify, idle 之一。常用simple和forking。
# simple(默认值):ExecStart启动的进程为该服务主进程。
# exec:exec与simple类似,不同之处在于,只有在该服务的主服务进程执行完成之后,systemd才会认为该服务启动完成。 其他后继单元必须一直阻塞到这个时间点之后才能继续启动。
# forking:ExecStart将以fork()方式启动,此时父进程将会退出,子进程将成为主进程。
# oneshot:oneshot与simple类似,不同之处在于,只有在该服务的主服务进程退出之后,systemd才会认为该服务启动完成,才会开始启动后继单元。 此种类型的服务通常需要设置RemainAfterExit=选项。当Type= 与 ExecStart=都没有设置时,Type=oneshot 就是默认值。
# dbus:类似于simple,但会等待D-Bus信号后启动。
# notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务。
# idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合。
# 建议对长时间持续运行的服务尽可能使用Type=simple(这是最简单和速度最快的选择)。注意,因为simple类型的服务 无法报告启动失败、也无法在服务完成初始化后对其他单元进行排序,所以,当客户端需要通过仅由该服务本身创建的IPC通道(而非由systemd创建的套接字或D-bus之类)连接到该服务的时候,simple类型并不是最佳选择。在这种情况下, notify或dbus(该服务必须提供D-Bus接口)才是最佳选择, 因为这两种类型都允许服务进程精确的安排何时算是服务启动成功、何时可以继续启动后继单元。notify类型需要服务进程明确使用sd_notify()函数或类似的API,否则,可以使用forking作为替代(它支持传统的UNIX服务启动协议)。最后,如果能够确保服务进程调用成功、服务进程自身不做或只做很少的初始化工作(且不大可能初始化失败),那么exec将是最佳选择。注意,因为使用任何 simple 之外的类型都需要等待服务完成初始化,所以可能会减慢系统启动速度。 因此,应该尽可能避免使用 simple 之外的类型(除非必须)。另外,也不建议对长时间持续运行的服务使用 idle 或 oneshot 类型。
Type=forking

#EnvironmentFile指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。
EnvironmentFile=/etc/nginx/nginx.conf

#启动命令
# ExecStart指定启动进程时执行的命令。
# ExecReload指定当该服务被要求重新载入配置时所执行的命令。另外,还有一个特殊的环境变量 $MAINPID 可用于表示主进程的PID,例如可以这样使用:/bin/kill -HUP $MAINPID。强烈建议将 ExecReload= 设为一个能够确保重新加载配置文件的操作同步完成的命令行。
# ExecStop指定停止服务时执行的命令。
# ExecStartPre指定启动服务之前执行的命令。不常用。
# ExecStartPost指定启动服务之后执行的命令。不常用。
# ExecStopPost指定停止服务之后执行的命令。不常用。
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

# 设为 true表示在进程的文件系统名字空间中挂载私有的 /tmp 与 /var/tmp 目录, 也就是不与名字空间外的其他进程共享临时目录。 这样做会增加进程的临时文件安全性,但同时也让进程之间无法通过 /tmp 或 /var/tmp 目录进行通信。
# 适用于web系统服务,不适用于mysql之类的数据库用户服务,数据库用户服务设为false。
PrivateTmp=true

#[Install]部分:指定服务的启用信息,只有在systemctl的enable与disable命令在启用/停用单元时才会使用此部分。
[Install]
# “WantedBy=multi-user.target”表示当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
WantedBy=multi-user.target

IT小胖豆:初学者踩坑之路及过程分享,希望能够帮到一些初学者,欢迎各位IT打工人,入坑讨论-_-

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/352.html

分享给朋友:

“Linux新手入门系列:systemctl服务service文件配置详解” 的相关文章

泛域名证书免费获取方式

免费通配符证书,也称为泛域名证书,是一种特殊的SSL证书,它允许您使用一张证书保护一个主域名及其所有下级子域名的安全。对于拥有多个子域名的网站来说,通配符证书可以简化证书的管理和部署过程,因为它消除了为每个子域名单独购买和安装证书的繁琐过程。免费通配符证书的部署教程以下是一个基于JoySSL平台的免...

NGINX配置跨域CORS支持 nginx配置跨域请求

NGINX配置跨域CORS支持这两天在搞酷瓜云网课的 app,采用 uni-app 做全端支持,现学现卖,目前算是入门了。在做 H5 的时候难免会跨域请求后端 API,虽然用 HBuilder 内置的浏览器不会有跨域问题(这个应该是做了内部处理),但是那个内置浏览器真尼妈坑爹,过一会就会卡死,导致...

ThinkPhp6从安装到配置全解

Thinkphp6已经不支持之前安装方式了,只能使用Composer安装,对于V6的新用户来说,真希望有个全过程手册,我就分享一下我自己安装使用的过程,供参考。一、安装Composer在 Linux 和 Mac OS中可以运行如下命令:curl -sS https://getcomposer.org...

SeaTunnel 实践 | SeaTunnel 帮你快速玩转 Spark 数据处理

Databricks 开源的 Apache Spark 对于分布式数据处理来说是一个伟大的进步。我们在使用 Spark 时发现了很多可圈可点之处,我们在此与大家分享一下我们在简化 Spark 使用和编程以及加快 Spark 在生产环境落地上做的一些努力。01一个 Spark Streaming 读取...

Nginx 重定向 HTTP 到 HTTPS 的便捷方法

问题描述 自从大规模使用 HTTPS 之后,所有的 HTTP 访问都要重定向到 HTTPS 站点。不然,客户只会输入域名,而很多浏览器又默认使用 HTTP 协议,如果我们没有提供 HTTP 访问,又不重定向,那客户将看到一个空白页(无法访问),客户会以为我们的站点有问题,毕竟客户哪里知道什么是 HT...

Vue3+Django4全新技术实战全栈项目(完结)

获课:itazs.fun/5739/### Vue 3 + Django 4 全新技术全栈项目在现代全栈开发中,Vue 3 和 Django 4 是非常受欢迎的技术组合。Vue 3 以其高效的响应式系统和组件化开发模式受到前端开发者的青睐,而 Django 4 则以其强大的 ORM 和安全性受到后端...