返回顶部
首页 > 资讯 > 操作系统 >在Linux系统中怎么创建和修改systemd单元文件
  • 568
分享到

在Linux系统中怎么创建和修改systemd单元文件

2023-06-12 23:06:07 568人浏览 八月长安
摘要

本篇内容介绍了“在linux系统中怎么创建和修改systemd单元文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1)单元文件概述单元文

本篇内容介绍了“在linux系统中怎么创建和修改systemd单元文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

(1)单元文件概述


单元文件包含单元的指令和行为信息。在后台systemctl命令和单元文件一起工作。为了出色而正确的完成工作,系统管理员必须能够手工编辑单元文件。一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。
单元配置文件的格式是:

代码如下:


unit_name.type_extension

这里的unit_name代表单元名称,type_extension代表单元类型。
单元文件可以作为附加的文件放置到一个目录下面,比如为了定制sshd.service服务,可以创建sshd.service.d/custom.conf文件,在文件中做一些自定义的配置。
同样的,可以创建sshd.service.wants/和sshd.service.requires/目录。这些目录包含sshd服务关联服务的软连接,在系统安装的时候,这些软连接或自动创建,也可以手工创建软连接。
许多单元配置文件可以使用单元说明符--通配的字符串,可以在单元文件被引导的时候动态的被变量替换。这使创建一些通用的单元配置模版成为可能。


(2)理解单元文件结构


典型的单元文件包含三节:
[Unit]节,包含不依赖单元类型的一般选项,这些选型提供单元描述,知道单元行为,配置单元和其他单元的依赖性。
[unittype]节,如果单元有特定的类型指令,在unittype节这些指令被组织在一起。举个例子,服务单元文件包含[Service]节,里面有经常使用的服务配置。
[Install]节,包含systemctlenable或者disable的命令安装信息。
1)[Unit]节选项
Description单元描述信息,这些文字信息在systemclstatus命令是会输出。
Documentation单元文档信息的URLs。
After定义在那些单元之后启动,本单元只在制定的单元启动之后启动,不像Requires选项,After选项不明确激活特定的单元,Before选项则是有相反的功能。
Requires配置单元的依赖性,在Requires选项中的单元需要一起被激活,如果有一个单元启动失败,其他单元都不会被启动。
Wants比Requires选项依赖性要弱很多,如果列表之中的的单元启动失败,不会对其他单元造成影响,这是推荐的建立自定义单元依赖性的方式。
Conflicts定义单元冲突关系,和Requires相反。
2)[unittype]类型是[Service]时的选项
Type配置单元进程在启动时候的类型,影响执行和关联选项的功能,可选的关键字是:
simple默认值,进程和服务的主进程一起启动;
forking进程作为服务主进程的一个子进程启动,父进程在完全启动之后退出。
oneshot同simple相似,但是进程在启动单元之后随之退出。
dbus同simple相似,但是随着单元启动后只有主进程得到D-BUS名字。
notify同simple相似,但是随着单元启动之后,一个主要信息被sd_notify()函数送出。
idle同simple相似,实际执行进程的二进制程序会被延缓直到所有的单元的任务完成,主要是避免服务状态和shell混合输出。
ExecStart指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。
ExecStop指定单元停止时执行的命令或者脚本。
ExecReload指定单元重新加载是执行的命令或者脚本。
Restart这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。
RemainAfterExit如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。
3)[Install]节选项
Alias为单元提供一个空间分离的附加名字。
RequiredBy单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。
WantBy单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。
Also指出和单元一起安装或者被协助的单元。
DefaultInstance实例单元的限制,这个选项指定如果单元被允许运行默认的实例。
4)一个postfix服务的例子:
单元文件位于/usr/lib/systemd/system/postifix.service,内容如下:

代码如下:


[Unit]
Description=PostfixMailTransportAgent
After=syslog.targetnetwork.target
Conflicts=sendmail.serviceexim.service
[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
EnvironmentFile=-/etc/sysconfig/network
ExecStartPre=-/usr/libexec/postfix/aliasesdb
ExecStartPre=-/usr/libexec/postfix/chroot-update
ExecStart=/usr/sbin/postfixstart
ExecReload=/usr/sbin/postfixreload
ExecStop=/usr/sbin/postfixstop
[Install]
WantedBy=multi-user.target

(3)创建自定义的单元文件


以下几种场景需要自定义单元文件:
希望自己创建守护进程;
为现有的服务创建第二个实例;
引入SysV init脚本。
另外一方面,有时候需要修改已有的单元文件。
下面介绍创建单元文件的步骤:
1)准备自定义服务的执行文件。
可执行文件可以是脚本,也可以是软件提供者的的程序,如果需要,为自定义服务的主进程准备一个PID文件,一保证PID保持不变。另外还可能需要的配置环境变量的脚本,确保所以脚本都有可执行属性并且不需要交互。
2)在/etc/systemd/system/目录创建单元文件,并且保证只能被root用户编辑:

代码如下:


touch/etc/systemd/system/name.servicechmod664/etc/systemd/system/name.service

文件不需要执行权限。
3)打开name.service文件,添加服务配置,各种变量如何配置视所添加的服务类型而定,下面是一个依赖网络服务的配置例子:

代码如下:


[Unit]
Description=service_description
After=network.target
[Service]
ExecStart=path_to_executable
Type=forking
PIDFile=path_to_pidfile
[Install]
WantedBy=default.target

4)通知systemd有个新服务添加:

代码如下:


systemctldaemon-reload
systemctlstartname.service

(4)创建emacs.service例子:


1)创建文件,并确保正确权限:
 

代码如下:


~]#touch/etc/systemd/system/eMacs.service
~]#chmod664/etc/systemd/system/emacs.service

2)添加配置信息:
 

代码如下:


[Unit]
Description=Emacs:theextensible,self-documentingtexteditor
[Service]
Type=forking
ExecStart=/usr/bin/emacs--daemon
ExecStop=/usr/bin/emacsclient--eval"(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=always
[Install]
WantedBy=default.target

3)通知systemd并开启服务:
 

代码如下:


~]#systemctldaemon-reload
~]#systemctlstartemacs.service

(5)创建第二个sshd服务的例子


1)拷贝sshd_config文件
 

代码如下:

]#cp/etc/ssh/sshd{,-second}_config

2)编辑sshd-second_config文件,添加22220的端口,和PID文件:
 

代码如下:

Port22220
PidFile/var/run/sshd-second.pid

如果还需要修改其他参数,请阅读帮助。
3)拷贝单元文件:
 

代码如下:

~]#cp/usr/lib/systemd/system/sshd{,-second}.service

4)编辑单元文件sshd-second.service
修改描述字段

代码如下:

Description=OpenSSHserversecondinstancedaemon

 
添加sshd.service服务在After关键字之后:

代码如下:

After=syslog.targetnetwork.targetauditd.servicesshd.service

 
移除sshdkey创建:

代码如下:

ExecStartPre=/usr/sbin/sshd-keygen

移除这一行
在执行脚本里,添加第二sshd服务的配置文件:

代码如下:

ExecStart=/usr/sbin/sshd-D-f/etc/ssh/sshd-second_config$OPTIONS

 
修改后的sshd-second.service文件内容如下:
 

代码如下:


[Unit]
Description=OpenSSHserversecondinstancedaemon
After=syslog.target network.targe tauditd.service sshd.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config$OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

5)如果使用SELinux,添加tcp端口,负责第二sshd服务的端口就会被拒绝绑定:
 

代码如下:

~]#semanage port -a -tssh_port_t -p tcp22220

6)设置开机启动并测试

代码如下:


~]#systemctl enable sshd-second.service
~]$ssh -p 22220 user@server

确保防火墙端口也开放。


(6)修改已经存在的单元文件


systemd单元配置文件默认保存在/usr/lib/systemd/system/目录,系统管理员不建议直接修改这个目录下的文件,自定义的文件在/etc/systemd/system/目录下,如果有扩展的需求,可以使用以下方案:
创建一个目录/etc/systemd/system/unit.d/,这个是最推荐的一种方式,可以参考初始的单元文件,通过附件配置文件来扩展默认的配置,对默认单元文件的升级会被自动升级和应用。
从/usr/lib/systemd/system/拷贝一份原始配置文件到/etc/systemd/system/,然后修改。复制的版本会覆盖原始配置,这种方式不能增加附件的配置包,用于不需要附加功能的场景。
如果需要恢复到默认的配置文件,只需要删除/etc/systemd/system/下的配置文件就可以了,不需要重启机器,使用如下命令应用改变就可以:

代码如下:


systemctl daemon-reload

daemon-reload选项重新加载所以单元文件并重新创建依赖书,在需要立即应用单元文件改变的时候使用。另外,也可以使用下面的命令达到同样的目的:
 

代码如下:


init q

还有,如果修改的是一个正在运行服务的单元文件,服务需要被重启下:

代码如下:

systemct lrestart name.service

(7)扩展默认单元配置文件配置


为了扩展默认的单元文件配置,需要先在/etc/systemd/system/下创建一个目录,用root执行类似下面的命令:
 

代码如下:


mkdir/etc/systemd/system/name.service.d

在刚才创建的目录之下创建配置文件,必须以.conf文件结尾。
例如创建一个自定义的依赖文件,内容如下:
 

代码如下:


[Unit]
Requires=new_dependency
After=new_dependency

另外一个例子,可以配置重启的时候,在主进程退出后30秒在重启,配置例子如下:

代码如下:


[Service]
Restart=always
RestartSec=30

推荐每次只产生一个小文件,每个文件只聚焦完善一个功能,这样配置文件很容易被移除或者链接到其他服务对的配置目录中。
为了应用刚才的修改,使用root执行以下操作:
 

代码如下:


systemctldaemon-reload
systemctlrestartname.service

例子:扩展Httpd.service服务配置
为了是httpd服务启动的时候执行用户自定义的脚本,需要修改httpd的单元配置文件,执行以下几步操作,首先创建一个自定义文件的目录及自定义文件:
 

代码如下:


~]#mkdir/etc/systemd/system/httpd.service.d
~]#touch/etc/systemd/system/httpd.service.d/custom_script.conf

假设自定义文件位置在/usr/local/bin/custom.sh,将这个信息添加到custom_script.conf自定义脚本中:

代码如下:


[Service]
ExecStartPost=/usr/local/bin/custom.sh

应用更改:

代码如下:


~]#systemctldaemon-reload
~]#systemctlrestarthttpd.service

 

“在Linux系统中怎么创建和修改systemd单元文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 在Linux系统中怎么创建和修改systemd单元文件

本文链接: https://lsjlt.com/news/263640.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Linux系统中怎么创建和修改systemd单元文件
    本篇内容介绍了“在Linux系统中怎么创建和修改systemd单元文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1)单元文件概述单元文...
    99+
    2023-06-12
  • 在Linux系统下修改现有systemd单元文件的方法是什么
    这篇文章跟大家分析一下“在Linux系统下修改现有systemd单元文件的方法是什么”。内容详细易懂,对“在Linux系统下修改现有systemd单元文件的方法是什么”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有...
    99+
    2023-06-26
  • 在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么
    今天就跟大家聊聊有关在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言systemd是Linux操作系统的系统...
    99+
    2023-06-26
  • Linux系统中怎么创建文件
    Linux系统中怎么创建文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对应英文:touch命令:touch [目录名]作用:如果文件不存在,新建文件Linu...
    99+
    2023-06-28
  • Linux中怎么创建分区和文件系统
    今天就跟大家聊聊有关Linux中怎么创建分区和文件系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用 CFdisk 创建一个基本的 Linux 分区以下是如何在命令行中创建一个基...
    99+
    2023-06-12
  • Linux系统中怎么创建文件夹
    这篇文章的内容主要围绕Linux系统中怎么创建文件夹进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!linux创建文件夹命令对应英文:make dir...
    99+
    2023-06-28
  • Linux系统怎么创建和挂载XFS文件系统
    本篇内容主要讲解“Linux系统怎么创建和挂载XFS文件系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统怎么创建和挂载XFS文件系统”吧!安装 XFS系统工具集 首先,你需要安装...
    99+
    2023-06-13
  • linux系统中怎么修改文件权限
    这篇文章给大家介绍linux系统中怎么修改文件权限,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问...
    99+
    2023-06-28
  • linux文件系统和挂载点怎么修改
    要修改Linux文件系统和挂载点,可以按照以下步骤进行:1. 确定要修改的文件系统或挂载点。可以使用命令df -h来查看当前的文件系...
    99+
    2023-10-20
    linux
  • 怎么在hadoop文件系统中创建目录
    要在Hadoop文件系统中创建目录,可以使用以下命令: hadoop fs -mkdir /path/to/directory 例...
    99+
    2024-03-05
    hadoop
  • linux中怎么修改创建文件夹目录颜色
    小编给大家分享一下linux中怎么修改创建文件夹目录颜色,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!方法:1、拷贝/etc/DIR_COLORS文件为当前主目录的 .dir_colorscp /etc/DIR_...
    99+
    2023-06-28
  • Linux系统怎么修改文件权限
    小编今天带大家了解Linux系统怎么修改文件权限,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Linux系统怎么修改文件权限”的知识...
    99+
    2023-06-28
  • 怎么在Linux分区或逻辑卷中创建文件系统
    本篇内容主要讲解“怎么在Linux分区或逻辑卷中创建文件系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Linux分区或逻辑卷中创建文件系统”吧!在 Linux 中,当你创建一个硬盘分区...
    99+
    2023-06-16
  • Linux系统下怎么修改最大传输单元MTU
    这篇文章主要介绍“Linux系统下怎么修改最大传输单元MTU”,在日常操作中,相信很多人在Linux系统下怎么修改最大传输单元MTU问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统下怎么修改最大传...
    99+
    2023-06-12
  • linux怎么创建文件系统并挂载
    在Linux系统中,可以使用以下步骤创建文件系统并挂载:1. 首先,使用fdisk或parted等工具对磁盘进行分区。例如,使用fd...
    99+
    2023-09-15
    linux
  • 使用C#怎么修改文件的创建和修改时间
    本篇文章为大家展示了使用C#怎么修改文件的创建和修改时间,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。File 类命名空间:System.IO程序集:System.IO.FileSystem.dll...
    99+
    2023-06-14
  • Linux系统怎么修改文件所有者
    今天就跟大家聊聊有关Linux系统怎么修改文件所有者,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。命令语法: chown [-R] 所有者名称 ...
    99+
    2023-06-28
  • 怎么在 Linux 中创建和管理归档文件
    本篇内容介绍了“怎么在 Linux 中创建和管理归档文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简而言之,归档是一个包含一系列文件和(...
    99+
    2023-06-15
  • 怎么在linux中修改系统时间
    怎么在linux中修改系统时间?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。(1)date 042612492005(2)hwclock -w第一步的意思是设置时间,设置完了可...
    99+
    2023-06-13
  • 怎么在Linux中修改系统时区
    怎么在Linux中修改系统时区?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作