首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取systemd OnFailure触发时进程的退出码?

systemd是一个Linux系统下的初始化系统和服务管理器,它可以用于启动、停止和管理系统中的各种服务。在systemd中,OnFailure选项用于定义当服务启动失败时要执行的操作。

要获取systemd OnFailure触发时进程的退出码,可以通过以下步骤进行:

  1. 在需要监控的服务单元配置文件中(通常位于/etc/systemd/system/目录下),添加OnFailure选项,并指定执行的操作。例如:
代码语言:txt
复制
[Service]
ExecStart=/path/to/your/service
OnFailure=exit-status@%n.service

其中,%n表示服务单元的名称。

  1. 创建一个新的服务单元文件,用于获取进程的退出码。在/etc/systemd/system/目录下创建一个名为exit-status@.service的文件,并添加以下内容:
代码语言:txt
复制
[Unit]
Description=Get exit status of %i

[Service]
ExecStart=/bin/sh -c 'echo "Exit code: $?" >> /path/to/your/log/file'
Type=oneshot
RemainAfterExit=yes

请将/path/to/your/log/file替换为保存退出码的日志文件路径。

  1. 重新加载systemd配置并启动或重启需要监控的服务单元。使用以下命令:
代码语言:txt
复制
sudo systemctl daemon-reload
sudo systemctl restart your-service-name

your-service-name替换为需要监控的服务单元名称。

  1. 监视日志文件以获取进程的退出码。使用以下命令:
代码语言:txt
复制
tail -f /path/to/your/log/file

/path/to/your/log/file替换为步骤2中设置的日志文件路径。通过观察日志文件,你将能够获取到进程的退出码。

需要注意的是,上述方法只适用于在systemd中以服务的形式启动的进程。对于直接在shell中执行的命令,可能无法获取退出码。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和弹性伸缩(Auto Scaling)。云服务器提供强大的计算能力,可用于托管应用程序和服务;弹性伸缩可以根据需求自动调整计算资源的规模,提供更高的可伸缩性和弹性。

腾讯云云服务器产品介绍链接:https://cloud.tencent.com/product/cvm 腾讯云弹性伸缩产品介绍链接:https://cloud.tencent.com/product/as

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程也返回一个非零的退出码?

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...[ $rc -ne 0 ] && break # 若子进程以非零退出码结束,则跳出循环 done #echo $rc exit $rc 将代码保存为文件 wait_procs_demo.sh,再运行测试

11600
  • Kubernetes 系列(3) —— Pod

    整个 Kubernetes 系统都是围绕着 Pod 展开的,比如如何运行 Pod、如何保证 Pod 的数量,如何访问 Pod 等。...因为容器是一个单进程模型,因此容器不适合运行多个进程,即容器不具备进程管理能力。如果要运行多进程,那么必须将将进程管理的systemd 作为主进程,但是这样就不具备对自己想要的进程进行直接管理了。...,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod nodeSelector: obeject    #设置NodeSelector...,在网络镜像比较紧张时,可以禁止从仓库获取镜像文件。...当 Pod 中的容器退出时,kubelet 会按指数回退 方式计算重启的延迟(10s、20s、40s、…),其最长延迟为 5 分钟。

    96620

    【重识云原生】第六章容器6.4.2.1节——pod详解

    失败(Failed): Pod中的所有容器都被终止了,但至少有一个容器退出失败(即退出码不为 0 或者被系统终止)。...restartPolicy 可以用来设置是否对退出的 Pod 重启,可选项包括 Always、OnFailure、以及 Never。...比如: 单容器的 Pod,容器成功退出时,不同 restartPolicy时的动作为: Always: 重启 Container; Pod phase保持 Running....单容器的 Pod,容器失败退出时,不同restartPolicy时的动作为: Always: 重启 Container; Pod phase保持 Running....而钩子的回调函数支持两种方式: exec:在容器内执行命令,如果命令的退出状态码是0表示执行成功,否则表示失败; httpGet:向指定 URL 发起 GET 请求,如果返回的 HTTP 状态码在[200

    2.5K11

    kubernetes的基本单位Pod详解

    一旦开始在集群节点中创建 Pod,首先就会进入 Pending 状态,只要 Pod 中的所有容器都已启动并正常运行,则 Pod 接下来会进入 Running 状态,如果 Pod 被要求终止,且所有容器终止退出时的状态码都为...Pod 正处于 Running 状态,若 Pod 中的一个容器突然损坏或者在退出时状态码不为0,Pod 将会从 Running 进入 Failed 状态。...在要求 Pod 正常关闭的时候,只要有一个容器退出的状态码不为0,Pod 就会进入 Failed 状态。...PreStop:容器开始和结束前,触发此事件,无论执行结果如何,都会结束容器。 回调的方式有两种:Exec 执行一段脚本和 HttpGet 执行特定的请求。...exec:在容器内部执行指定的命令,如果命令以状态码“0”退出,则表示诊断成功。

    1.2K10

    systemctl命令

    .]: 重置指定单元的fail状态,或者如果没有传递单元名称,则重置所有单元的状态,当一个单元以某种方式发生故障(即进程带非零错误代码退出、异常终止或超时)时,它将自动进入fail状态,并记录其退出代码和状态供管理员自查....: 取消设置一个或多个systemd manager环境变量,如果只指定了变量名,则无论其值如何,都将删除该变量名,如果指定了一个变量和一个值,则仅当该变量具有指定的值时才会删除该变量。...OnFailure: 当这个模块启动失败时,就自动启动列出的每个模块。 Conflicts: 与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。...,则应该将Type的值设置为forking,否则systemd将不会跟踪子进程的行为,而认为服务已经退出。...RemainAfterExit: 值为true或false,也可以写yes或no,默认为false,当配置值为true时,systemd只会负责启动服务进程,之后即便服务进程退出了,systemd仍然会认为这个服务是在运行中的

    1.7K20

    编写一个服务systemd的启动方式

    该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。上面的例子中,sshd 的环境参数文件是/etc/sysconfig/sshd。...配置文件里面最重要的字段是ExecStart。ExecStart字段:定义启动进程时执行的命令。...一种使用场合是为让该服务的输出,不与其他服务的输出相混合重启行为Service区块有一些字段,定义了重启行为。KillMode字段:定义 Systemd 如何停止 sshd 服务。...no(默认值):退出后不会重启on-success:只有正常退出时(退出状态码为0),才会重启on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启on-abnormal:...只有被信号终止和超时,才会重启on-abort:只有在收到没有捕捉到的信号终止时,才会重启on-watchdog:超时退出,才会重启always:不管是什么退出原因,总是重启对于守护进程,推荐设为on-failure

    49220

    Systemd 入门教程:实战篇

    上一篇文章,我介绍了 Systemd 的主要命令,今天介绍如何使用它完成一些基本的任务。...配置文件里面最重要的字段是ExecStart。 ExecStart字段:定义启动进程时执行的命令。...KillMode字段:定义 Systemd 如何停止 sshd 服务。...no(默认值):退出后不会重启 on-success:只有正常退出时(退出状态码为0),才会重启 on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 on-abnormal...:只有被信号终止和超时,才会重启 on-abort:只有在收到没有捕捉到的信号终止时,才会重启 on-watchdog:超时退出,才会重启 always:不管是什么退出原因,总是重启 对于守护进程,推荐设为

    1K70

    Systemd管理服务

    ,终止或重启当前服务,而不会随列出模板的启动而启动 OnFailure:当这个模板启动失败时,就会自动启动列出的每个模块 Conflicts:与这个模块有冲突的模块,如果列出的模块中有已经在运行的,这个服务就不能启动...,它有以下几种值: Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot...:一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行 Type=...当配置为 true 时,Systemd 只会负责启动服务进程,之后即便服务进程退出了,Systemd 也仍然会认为这个服务还在运行中。...通常,对于这种服务,将此值指定为 0,从而关闭超时检测 TimeoutStopSec:停止服务时的等待秒数,如果超过这个时间仍然没有停止,Systemd 会使用 SIGKILL 信号强行杀死服务的进程

    67330

    MySQL kill -9和kill -15后能否被systemd自动拉起

    实验环境: centos7.9 + percona rpm方式安装的 8.0.37先试下kill -9 ,如下图:可以看到kill -9后,systemd会自动重新拉起一个mysqld进程。...on-success:如果服务以成功状态(即退出码为0)退出,则会重启服务。on-failure:如果服务以失败状态(即非零的退出码)退出,则会重启服务。...这通常用于那些配置了 WatchdogSec 的服务。on-abort:这是一个较旧的术语,现在等同于 on-abnormal。always:无论服务如何退出,都会重启服务。...根据上面的2个实验:因为 kill -15的退出码是0(通常正常的退出码都是0的),因此systemd不会再次尝试拉起MySQLD进程。...因为 kill -9 的退出码非0,满足了on-failure 这个条件,因此systemd会尝试再次拉起MySQLD进程。

    14810

    Pod的健康检查和重启策略配置

    livenessProbe支持以下三种方式进行检查:HTTP探针:通过向指定的路径发送HTTP GET请求,并检查返回的状态码来判断容器的健康状态。...常见的重启策略包括Always、OnFailure和Never。具体配置如下:Always表示总是重启Pod,无论是因为异常终止还是正常退出。这是默认的重启策略。...OnFailure表示仅在Pod失败时重启。当Pod以非零退出状态码终止时,将会触发重启。Never表示不会重启Pod。当Pod终止时,不会自动重启。...使用适当的健康检查机制。Pod的重启是由健康检查触发的,可以配置适当的健康检查来排查和修复问题。通过配置适当的探针,可以确保只有在真正的故障情况下才会触发重启。设置资源限制和请求。...在这种情况下,应及时更新镜像版本,以获取修复的问题和稳定的功能。通过以上措施,可以有效地配置Pod的重启策略,并避免无限重启的情况发生。

    70531

    【Linux探索学习】第十七弹——进程终止:深入解析操作系统中的进程终止机制

    父进程终止 当父进程终止且子进程未被接管时,子进程可能成为孤儿进程,由init或systemd进程接管。 资源耗尽 进程因超出系统资源限制(如内存、文件句柄等)被操作系统强制终止。...main函数返回值是返回给进程看的,本质表示:进程运行完成时是否是正确的结果,如果是一般返回0,如果不是返回其它数字代表不同的退出信息(退出码) 我们可以通过这个指令打印退出码: echo $?...,这一点与return有较大差别 4.2 errno常量和strerror函数 4.2.1 strerror函数 上面我们提到我们可以通过不同的退出码来代表不同的错误信息,那么不同的退出码究竟各自代表什么信息呢...,我们可以通过echo来查看退出码,那我们如何获取呢?...文件描述符:关闭该进程打开的所有文件。 CPU时间:释放进程的时间片。 5.2 僵尸进程 当子进程终止但父进程未调用wait或waitpid回收其状态时,子进程会变成僵尸进程。 如何避免僵尸进程?

    20710

    自定义 systemctl 管理服务

    [Service]启动行为 启动命令 > ExecStart字段:定义启动进程时执行的命令 > ExecReload字段:重启服务时执行的命令 > ExecStop字段:停止服务时执行的命令 > ExecStartPre...它可以设置的值如下: > simple(默认值):ExecStart字段启动的进程为主进程 > forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程(后台运行...一种使用场合是为让该服务的输出,不与其他服务的输出相混合 重启行为 Service区块有一些字段,定义了重启行为: > KillMode字段:定义 Systemd 如何停止 sshd 服务: > control-group...>> no(默认值):退出后不会重启 >> on-success:只有正常退出时(退出状态码为0),才会重启 >> on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启...>> on-abnormal:只有被信号终止和超时,才会重启 >> on-abort:只有在收到没有捕捉到的信号终止时,才会重启 >> on-watchdog:超时退出,才会重启 >> always:不管是什么退出原因

    1.6K30

    Linux学习笔记之Centos7 自定义systemctl服务脚本

    User=user # 设置服务运行的用户 Group=user # 设置服务运行的用户组 KillMode=control-group # 定义systemd如何停止服务...PIDFile=/usr/local/test/test.pid # 存放PID的绝对路径 Restart=no # 定义服务进程退出后,systemd的重启方式,默认是不重启 ExecStart...stop命令 Restart的类型: no(默认值): # 退出后无操作 on-success: # 只有正常退出时(退出状态码为0),才会重启 on-failure: #...非正常退出时,重启,包括被信号终止和超时等 on-abnormal: # 只有被信号终止或超时,才会重启 on-abort: # 只有在收到没有捕捉到的信号终止时,才会重启...on-watchdog: # 超时退出时,才会重启 always: # 不管什么退出原因,都会重启 # 对于守护进程,推荐用on-failure RestartSec字段:

    3.1K30

    Pod重启策略

    一、概述在Kubernetes中,Pod是最小的可部署对象,可以由一个或多个容器组成。在实际使用中,Pod可能会由于各种原因停止工作,此时可以通过Pod的重启策略来决定如何处理这种情况。...在本文中,我们将介绍Pod的重启策略以及如何设置重启策略。二、Pod的重启策略Pod的重启策略定义了在容器失败或退出时,Kubernetes将如何处理该Pod。...Kubernetes提供了三种重启策略:Always、OnFailure和Never。Always在容器失败或退出时,Kubernetes将始终自动重新启动容器。这是默认的重启策略。...OnFailure在容器失败或退出时,Kubernetes将仅重新启动容器,如果退出码不为0(即容器未正常退出),则会执行重新启动。如果容器成功退出,将不会自动重启。...my-container image: my-image restartPolicy: OnFailure在上述示例中,Pod仅在容器失败或退出时重新启动容器。

    1.5K41

    【Docker】专题五:Docker 配置文件详解

    systemd 作为初始化系统时的服务单元文件,它定义了 Docker 服务启动、停止和管理的方式。...如何杀死 Docker 进程(control-group、process、mixed、none) Restart # 指定 Docker 服务的重启策略,默认 StartLimitInterval...(退出码为0)时才会重启 on-failure:仅当服务异常退出(非零退出码)时才会重启 on-abnormal:仅当服务以异常信号退出或被终止时才会重启 on-abort:仅当服务因为接收到 SIGABRT...信号而退出时才会重启 on-watchdog:仅当服务超时(看门狗超时)时才会重启 always:无论服务是正常退出还是异常退出,都会重启 docker.socket 文件 1、基本介绍 docker.socket...是 Docker 守护进程(Docker Daemon)在 Linux 系统上使用 systemd 作为初始化系统时的 UNIX 套接字文件,是 Docker API 的主要入口,Docker Client

    99510

    可能是史上最全面易懂的 Systemd 服务管理教程!( 强烈建议收藏 )

    Systemd 的后台服务还有一个特殊的身份——它是系统中 PID 值为 1 的进程。 更少的进程 Systemd 提供了 服务按需启动 的能力,使得特定的服务只有在真定被请求时才启动。...并且,如果其中任意一个服务启动失败,这个服务也会被终止 Wants:与 Requires 相似,但只是在被配置的这个 Unit 启动时,触发启动列出的每个 Unit 模块,而不去考虑这些模板启动是否成功...,终止或重启当前服务,而不会随列出模板的启动而启动 OnFailure:当这个模板启动失败时,就会自动启动列出的每个模块 Conflicts:与这个模块有冲突的模块,如果列出的模块中有已经在运行的,这个服务就不能启动...,创建后父进程会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕...当配置为 true 时,Systemd 只会负责启动服务进程,之后即便服务进程退出了,Systemd 也仍然会认为这个服务还在运行中。

    70.1K1216

    pod 知识点 下

    Unknown 由于某种原因无法获取到 pod 的状态,例如网络问题等等 pod 的重启策略是啥样的 上一篇文章我们手写 yaml 的时候,还记得 yaml 里面的这个字段吗 restartPolicy...Never 不管容器运行的状态怎么样,正常还是异常,kubelet 都不会重启该容器 OnFailure 容器终止运行的时候,并且退出码不是 0, kubelet 就会重启该 容器 上面说到的 pod...的状态又是如何转换的呢?...中有 2 个以上的容器的时候: 当前 pod 的状态 若发生如下事件 pod 的状态会如何调整 Running 有 1 容器退出异常 - Always 重启策略状态仍然是 Running- Never...重启策略状态会变成 Failed- OnFailure 重启策略状态会变成 Running pod 的资源是如何配置的?

    16230
    领券