linux进阶55——service文件

这篇具有很好参考价值的文章主要介绍了linux进阶55——service文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现流程

创建.service文件

创建ping@.service文件,内容可以如下:

[Unit]
Description=ping daemon
After=network.target 

[Service]
Restart=on-failure
ExecStart=/usr/bin/ping 127.0.0.%d
ExecReload=/bin/kill -s -HUP $MAINPID               
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
KillMode=none                  
LimitCORE=infinity

[Install]
WantedBy=multi-user.target 

文件迁移

将.service文件拷贝至/usr/lib/systemd/system/下

cp ping@.service /usr/lib/systemd/system/

加载配置

systemctl daemon-reload

调用服务

# 启动服务
systemctl start ping@1

# 查看服务进程
ps –aux | grep ping

systemctl

概念

systemctl是一个systemd工具,负责控制systemd系统和管理系统服务。

命令

#当新增或修改service单元文件时,需要系统重新加载所有修改过的配置文件
systemctl daemon-reload

#设置为开机自启动
systemctl enable RegisterCenter

#关掉开机启用
systemctl disable RegisterCenter

#启动服务
systemctl start RegisterCenter

#重启服务,相当于先stop,再start
systemctl restart RegisterCenter

#关闭服务,关闭服务后,进程会全部被kill掉
systemctl stop RegisterCenter

#查看服务的状态
systemctl status RegisterCenter

#查看服务是否开机启动
systemctl is-enabled RegisterCenter

#查看已启动的服务列表
systemctl list-unit-files|grep enabled
#
显示所有已启动的服务
systemctl list-units --type=service

#查看启动失败的服务列表
systemctl --failed

# 杀死一个服务的所有子进程
systemctl kill RegisterCenter

# 重新加载一个服务的配置文件
systemctl reload RegisterCenter

#移除标记为丢失的 Unit 文件。在删除 Unit 文件后,由于缓存的关系,
#即使通过 daemon-reload 更新了缓存,在 list-units 中依然会显示标记为 not-found 的 Unit
systemctl reset-failed RegisterCenter

service文件组成

控制单元(Unit)

主要包括服务描述、启动顺序和依赖关系。

  • Description:当前服务的简单描述;
  • Documentation:文档位置;
  • After:在什么服务之后启动;
  • Before:在什么服务之前启动;
说明:After和Before字段只涉及启动顺序,不涉及依赖关系。
  • Wants:表示“弱依赖”关系。某服务停止运行或退出不影响该服务继续运行;
  • Requires:表示”强依赖”关系。列在其中的Uint模块会在这个服务启动的同时被启动,如果其中任意一个启动失败,这个服务会被终止。某服务停止运行或退出,该服务也必须停止运行。
说明:Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
  • PartOf:该参数仅用于单元的停止或重启。

服务定义(service)

Type

定义启动类型。可设置的值如下:

  • simple(默认值):ExecStart字段启动的进程为主进程;
  • forking:ExecStart字段以fork()方式启动,父进程退出后,子进程将成为主进程;
  • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务;
  • dbus:类似于simple,但会等待 D-Bus 信号后启动;;
  • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务;
  • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混;

Environment

为服务设置环境变量。

EnvironmentFile

加载包含服务所需环境变量参数的文件。

PIDFile

该服务PID文件的路径(一般位于 /run/ 目录下)。 建议在 Type=forking 的情况下明确设置此选项。 如果设为相对路径,那么表示相对于 /run/ 目录。 systemd 将会在此服务启动完成之后,从此文件中读取主服务进程的PID 。 systemd 不会写入此文件,但会在此服务停止后删除它(若仍然存在)。

ExecStart

启动程序时执行的命令。例如:

# %d为启动时需要传入的参数
ExecStart=/usr/bin/ping 127.0.0.%d

ExecReload

重启服务执行的命令。例如:

ExecReload=/bin/kill -s -HUP $MAINPID  

表示终止主进程且不产生core dump,重启服务。

ExecStop

通知服务时执行的命令。例如:

ExecStop=/bin/kill -s QUIT $MAINPID

表示中断退出的方式终止进程且产生core dump,停止服务。

ExecStartPre

启动服务之前执行的命令。

ExecStartPost

启动服务之后执行的命令。

ExecStopPost

停止服务之后执行的命令。

KillMode

定义systemd如何停止sshd服务。设置值如下:

l control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;

l process:只杀主进程;

l mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;

l none:没有进程会被杀掉,只是执行服务的 stop 命令;

Restart

定义sshd退出后,systemd的重启方式。设置值如下:

  • no(默认值):退出后不会重启;
  • on-success:只有正常退出时(退出状态码为0),才会重启;
  • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
  • on-abnormal:只有被信号终止和超时,才会重启;
  • on-abort:只有在收到没有捕捉到的信号终止时,才会重启;
  • on-watchdog:超时退出,才会重启;
  • always:不管是什么退出原因,总是重启;
说明:对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

服务出现情况与重启对应表

退出原因/设置值 no always on-success on-failure on-abnormal on-abort on-watchdog
正常退出
退出码不为0
进程被强制杀死
操作超时
看门狗超时

SuccessExitStatus

额外定义其他的进程"正常退出"状态。 也就是,在退出码"0"、以及表示"正常退出"的 SIGHUP, SIGINT, SIGTERM, SIGPIPE 信号之外, 再额外添加一组表示"正常退出"的退出码或信号。 可以设为一系列以空格分隔的数字退出码或者信号名称, 例如:

SuccessExitStatus=1 2 8 SIGKILL

表示当进程的退出码是 1, 2, 8 或被 SIGKILL 信号终止时, 都可以视为"正常退出"。

如果多次使用此选项, 那么最终的结果将是多个列表的合并。 如果将此选项设为空, 那么先前设置的列表 将被清空。

RestartSec

重启服务之前需要等待的秒数。

WorkingDirectory

指定服务工作目录

User

指定运行服务的用户。

PrivateTmp

设置true表示在进程的文件系统名字空间中挂载私有的/tmp和/var/tmp目录,也就是不与名字空间外的其他进程共享临时目录。这样做会增加进程的临时文件安全性,但同时也让进程之间无法通过/tmp或/var/tmp目录进行通信。

安装部分(Install)

用来定义如何启动以及是否开机启动。

WantedBy

表示该服务所在的Target。 Target的含义是服务组,表示一组服务。“WantedBy=multi-user.target”指的是服务所在的Target是multi-user.target。

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

RequiredBy

依赖当前服务的模块。它的值是一个或多个 target,执行enable命令时,符号链接会放入/etc/systemd/system目录下以 target 名 + .required后缀构成的子目录中。

Alias

当前Unit可用于启动的别名。

Also

当前 Unit 被 enable/disable 时,会被同时操作的其他 Unit

Target

概念

Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。

命令

# 查看当前系统的所有 Target
$ systemctl list-unit-files --type=target

# 查看一个 Target 包含的所有 Unit
$ systemctl list-dependencies multi-user.target

# 查看启动时的默认 Target
$ systemctl get-default

# 设置启动时的默认 Target
$ systemctl set-default multi-user.target

# 切换 Target 时,默认不关闭前一个 Target 启动的进程,systemctl isolate 命令改变这种行为,关闭前一个 Target 里面所有不属于后一个 Target 的进程

启动流程

  • 读入 /boot 目录下的内核文件;
  • 内核文件加载完之后,开始执行第一个程序/sbin/init 初始化进程,由 Systemd 初始化系统引导,完成相关的初始化工作;
  • Systemd 执行default.target ,获知设定的启动 target (查看默认 target: systemctl get-default);
  • Systemd 执行启动 target 对应的单元文件。根据单元文件中定义的[依赖关系](bootup Manager Bootup),传递控制权,依次执行其他 target 单元文件,同时启动每个 target 包含的单元

systemd中文文档可参考:http://www.jinbuguo.com/systemd/systemd.service.html#文章来源地址https://www.toymoban.com/news/detail-604094.html

到了这里,关于linux进阶55——service文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux服务器中启动mysql出现Redirecting to /bin/systemctl start mysql.service错误及处理

    service mysql start 启动mysql服务器时,提示如下错误: 原因推测: service mysql start 是重定向到 /bin/systemctl restart mysql.service. mysql 与mysqld是不同的,前者交互式命令(客户端),mysqld才是后端服务进程,应该是启错了 使用 service mysqld start 或者 systemctl start mysqld 启动 附:其他操作

    2024年02月13日
    浏览(58)
  • mysql进阶-修改linux服务器中MySQL的字符集

    linux 中 mysql8 默认的字符集是 latin1 ,在插入中文时会报错,所以一般在配置好mysql时需要修改字符集为 utf8 【又叫utfmb3,一般开发够用,一个字符用3个字节表示】或者 utfmb4 【一个字符用4个字节表示,如果存储emoji表情,必须用utfmb4】 1366 - Incorrect string value: xE4 xBA xBA(xE7 x94 x

    2024年02月14日
    浏览(48)
  • Linux -- 进阶 Web服务器 搭建基于 https 协议的静态网站 ( 预备知识 )

                什么是 HTTPS ?   HTTPS  协议背景 ?         ===                  HTTP 协议  即  超文本传输协议 ,                 它出生的很早,在早期,网络服务的相关攻击呢,或者病毒啥的几乎没有,安全类的问                  题也是少之又少。   

    2024年02月06日
    浏览(50)
  • Linux -- 进阶 Web服务器 搭建基于 HTTPS 协议的静态网站 (实验实操)

                  现在我们想架设一个 互联网网站的话,我们就得想法认证自己是官方的,得产生一个证书         这个证书呢,我们使用的是 X.509  格式的证书                                该证书 包含三个文件 :  key , csr , crt 。           先介绍下 :  PKI(

    2024年02月07日
    浏览(49)
  • linux服务器文件实时同步

    在做系统集群部署时,涉及到两个或多个服务器之间文件同步.在软件层面linux服务环境找到以下两种同步方式 利用linux NFS功能将网络共享文件挂载成本地目录 采用文件监听,实时推送 服务器资源如下 服务器1 10.2.4.51 ,作为主服务器 服务器2 10.2.4.52 ,作为从服务器 2.1 主服务器

    2024年03月09日
    浏览(70)
  • linux服务器间文件传输

            当对服务器应用或文件进行迁移时,一般的方法是找一台电脑,先把文件从A服务器下载到电脑,然后再从电脑上传到B服务器。但这样传有几个问题:         1、步骤繁琐,必须通过电脑作为中介         2、需要安装额外的软件,比如winscp、FileZilla 等传输工具  

    2024年02月10日
    浏览(49)
  • Linux服务器移动文件命令

    mv(move) 命令可以将文件和目录从一个位置 移动 到另一个位置;         它也可以用来 重命名 文件和目录。 mv命令语法         source 可以是一个或多个文件或目录;         destination 总是一个文件或目录;         如果我们以单个文件为源,以一个目录为目标

    2023年04月25日
    浏览(61)
  • 【Linux】FTP文件服务器

    FTP (File transfer protocol) 是TCP/IP 协议组中的协议之一。他最主要的功能是在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。将文件从自己计算机中拷贝至远程计算机上,则称

    2024年02月10日
    浏览(60)
  • java根据服务器(linux)端ip+文件路径将服务器端文件下载到本地

    jsch:Maven Repository: com.jcraft » jsch » 0.1.55 (mvnrepository.com)​​​​​  

    2024年02月11日
    浏览(66)
  • Java中将本服务器的文件拷贝到另一个服务器(Linux to Linux)

    在Java中,将文件从一个服务器复制到另一个服务器,你可以使用Secure Copy(SCP)进行操作。Java中的 JSch 库可以进行此操作。 首先,需要添加 JSch 库依赖到你的项目中。如果你使用的是Maven,可以添加以下依赖: 以下是一个使用 JSch 进行SCP操作的示例: 这段代码首先创建了一

    2024年02月13日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包