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

当binary或bash退出并返回错误代码时,Systemd "OnFailure=“不启动

当binary或bash退出并返回错误代码时,Systemd "OnFailure="不启动。

Systemd是一个Linux系统初始化和管理系统进程的工具。它可以监控和控制系统中运行的服务和进程。在Systemd中,可以使用"Unit"配置文件来定义和配置服务。

当一个binary或bash脚本在执行过程中退出并返回错误代码时,Systemd提供了"OnFailure="选项来定义在服务失败时应该执行的操作。这个选项可以用于指定一个或多个其他的Systemd单元,以便在服务失败时启动这些单元。

具体来说,"OnFailure="选项可以设置为以下几种值:

  1. "OnFailure=replace":如果服务失败,Systemd将尝试重新启动该服务。
  2. "OnFailure=restart":如果服务失败,Systemd将尝试重新启动该服务,并且在每次失败后都会尝试重新启动。
  3. "OnFailure=notify":如果服务失败,Systemd将发送一个通知给Systemd的通知机制,以便其他进程可以接收到该通知并执行相应的操作。
  4. "OnFailure=ignore":如果服务失败,Systemd将忽略该失败并继续运行其他服务。

需要注意的是,"OnFailure="选项只有在服务的"ExecStart="指定的命令退出并返回错误代码时才会生效。如果服务是由其他方式启动的,比如通过"ExecStartPre="或"ExecStartPost="指定的命令,那么"OnFailure="选项将不会生效。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供高性能、可扩展的云服务器实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):基于Kubernetes的容器管理服务,提供高可用、弹性伸缩的容器集群。详情请参考:https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):提供安全可靠、高扩展性的云端存储服务,适用于存储和处理各种类型的数据。详情请参考:https://cloud.tencent.com/product/cos

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求和情况进行。

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

相关·内容

如何实现Linux服务Crash后自动重启?

Systemd Systemd Restart Systemd 允许你对服务进行配置,以便在服务崩溃时自动重启。...不过,你可以让 systemd 自动重启守护进程,以防它崩溃或意外被杀掉。为此,你可以在 [Service] 中添加 Restart 选项。...Systemd OnFailure 重启一项服务固然很好,但在某个单元出现故障时采取特定行动就更好了。...也许你使用的软件有一个已知的错误,要求在崩溃时删除缓存文件,也许你想启动一个脚本来收集日志和系统信息,以便诊断问题。Systemd 允许你指定在服务失败时运行的单元。...在本例中,当单元发生故障时,系统将优雅地重新启动: [Unit] Description=Lightweight Kubernetes Documentation=https://k3s.io Wants

96340

第十六章.Linux系统管理-开机启动流程

这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。...至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。  4.建立终端 rc执行完毕后,返回init。...当系统启动时,内核从initrd.img加载所有必要的内核模块和驱动器,以加载Linux7中的系统第一个进程systemd,在6里面,init是爸爸,在7里面换了个爸爸,那就是systemd 下面的命令将帮助您找到...  ---- CentOS7通过光盘进入救援模式 1.挂载光盘镜像  2.从BIOS启动  3.进入BIOS设置从光盘启动  4.按F10保存并退出  5.进入救援模式 ...active(exited) 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出) active(waiting) 服务已经运行但在等待某个事件 inactive 服务没有在运行

2.4K20
  • 守护进程

    守护进程行为:守护进程可能会忽略 SIGCHLD 信号,特别是当它不需要对子进程的退出状态进行处理时。 6....守护进程通常是系统后台运行的进程,通常没有控制终端,并且可以在系统启动时自动启动或在用户退出登录时保持运行。守护进程会与控制终端断开连接,通常用于执行长期运行的任务。...这是因为守护进程一般不希望占用当前工作目录,并防止在程序退出时当前工作目录被锁定。如果设置为 1,则守护进程的当前工作目录不会改变。...返回值: 成功时,返回 0。 出错时,返回 -1,并将 errno 设置为具体的错误值。...退出状态:守护进程通常是长期运行的,退出时要考虑清理工作,如关闭打开的文件、释放资源等。 进程管理:可以使用进程管理工具如 systemd 或 init.d 来启动和管理守护进程。

    7210

    如何编写bash脚本以便在进程死机时重新启动进程

    bash脚本来检查它是否正在运行,如果没有,则启动它。...." >&2 sleep 1 done 上面的bash代码在一个until循环中运行procA。第一行启动procA并等待它结束。当它结束时,until检查其退出状态。...如果退出状态为0,则表示它正常结束(这意味着你要求它以某种方式关闭,并且它成功关闭了)。在这种情况下,我们不想重新启动它(我们只是要求它关闭!...如果退出状态不是0,until将运行循环体,该循环体在STDERR上发出错误消息,并在 1 秒后重新启动循环(返回第 1 行)。 我们为什么要等一会儿?...然后需要做的就是启动这个bash脚本,它将监控procA并在必要时重新启动它。如果你想在(操作系统)启动时启动监控脚本,你可以用@reboot规则在用户的 cron(1) 中调度它。

    19220

    systemctl命令

    .]: 重置指定单元的fail状态,或者如果没有传递单元名称,则重置所有单元的状态,当一个单元以某种方式发生故障(即进程带非零错误代码退出、异常终止或超时)时,它将自动进入fail状态,并记录其退出代码和状态供管理员自查...启动单元不应与启动(激活)单元混淆,就像启动命令所做的那样,启用和启动装置是正交的,装置可以不启动就启用,也可以不启动就启动,启用只需将单元挂接到各种建议的位置,例如,这样在引导时或插入特定类型的硬件时...System Commands is-system-running: 检查系统是否正在运行,当系统完全启动并运行时,返回success,这意味着不处于启动、关闭或维护模式,否则返回失败,此外,当前状态以短字符串形式打印到标准输出...OnFailure: 当这个模块启动失败时,就自动启动列出的每个模块。 Conflicts: 与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。...RemainAfterExit: 值为true或false,也可以写yes或no,默认为false,当配置值为true时,systemd只会负责启动服务进程,之后即便服务进程退出了,systemd仍然会认为这个服务是在运行中的

    1.7K20

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

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

    11600

    这样用 systemd 可能会有风险

    宿主服务注册为系统服务并且随系统开机自启动。宿主服务支持接收服务端指令并拉起一些常驻进程,拉起的进程我们简称为子进程。当宿主服务被 kill 或意外终止时,会引起子进程一起被 kill。...因为 simple 类型不存在主进程退出的情况也就不存在有返回状态的情况,所以它一旦启动就认为是成功的,除非没起来。 forking:标准 Unix Daemon 使用的启动方式。...其他类型千万不要去设置RemainAfterExit=yes,否则systemd会认为服务启动成功了,重启或再去启动都会失败。...dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。...比如你 ExecStart 的是个 shell 脚本,里面可能跑了一些别的东西,如果不这样的话,那很可能别的东西的控制台输出里会多一个“启动成功”这样的 Systemd 消息。

    81610

    100个Linux命令(7)-进程管理

    随着时间的流逝,分配给进程的时间也会被逐渐消耗,当分配时间消耗完毕时,内核收回此进程的控制权,并让下一个进程运行。...后台进程 若在执行命令时,在命令的结尾加上符号"&",它会进入后台。将命令放入后台,会立即返回父进程,并返回该后台进程的的jobid和pid,所以后台进程的父进程不会进入睡眠。...一般的方法也是最简单的方法是使用nohup命令带上要执行的命令或脚本放入后台,这样任务就脱离了终端的关联。当终端退出时,该任务将自动挂到init(或systemd)进程下执行。...此信号为EXIT信号,表示直接退出。如果kill发送的信号是0(即kill -0)则表示不做任何处理直接退出,但执行错误检查:当检查发现给定的pid进程存在,则返回0,否则返回1。...三种方式可以改变因终端中断发送sighup而导致子进程也被结束的行为:一是使用nohup命令启动进程,它会忽略所有的sighup信号,使得该进程不会随着终端退出而结束;二是将待执行命令放入子shell中并放入后台运行

    1.7K20

    linux: Shell脚本设计函数的成功和异常返回值

    在编写复杂的 Shell 脚本时,使用函数是一种常见的做法,它有助于提高代码的可读性和可维护性。...函数可以接受参数,并且可以返回一个值,通常是一个退出状态码,用于指示函数的执行结果。...当函数执行成功且没有错误时,应返回 0。这遵循了 UNIX 和 Linux 中的常规惯例,即“无消息即好消息”。...通常,1 用作通用错误代码,但您可以根据需要使用不同的值来表示特定类型的错误。 示例:异常返回 bash download_file() { wget "$1" if [ $?...使用描述性错误代码:使用不同的非零值来区分不同类型的错误。 在文档中记录返回代码:在脚本或函数的文档中说明每个返回代码的含义。 一致性:在整个脚本中保持返回值的一致性。

    50510

    Docker之容器操作

    新建井启动容器 除了创建容器后通过 start 命令来启动 也可以直接新建并启动容器。...当利用 docker [container] run 来创建并启动容器时, Docker 在后台运行的标准操作包括: 检查本地是否存在指定的镜像,不存在就从公有仓库下载; 利用镜像创建一个容器,并启动该容器...某些时候,执行 docker [container] run时候因为命令无法正常执行容器会出错直接退出, 此时可以查看退出 的错误代码 。...例如,下面的命令会在后台运行容器 : 容器启动后会返回一个唯一的 id ,也可以通过 docker ps 或 docker container ls命令来查看容器信息: 5....当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了 。

    50510

    Systemd管理服务

    Systemd 服务管理 简介 Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责,并支持通过特定事件...To:与 Requires 相似,失败时失败,成功时成功,但是在这些模板中有任意一个出现意外结束或重启时,这个服务也会跟着终止或重启 Part Of:一个 Bind To 作用的子集,仅在列出的任务模块失败或重启时...,终止或重启当前服务,而不会随列出模板的启动而启动 OnFailure:当这个模板启动失败时,就会自动启动列出的每个模块 Conflicts:与这个模块有冲突的模块,如果列出的模块中有已经在运行的,这个服务就不能启动...当配置为 true 时,Systemd 只会负责启动服务进程,之后即便服务进程退出了,Systemd 也仍然会认为这个服务还在运行中。...systemd-analyze 显示此次系统启动时运行每个服务所消耗的时间,可以用于分析系统启动过程中的性能瓶颈 systemd-ask-password:辅助性工具,用星号屏蔽用户的任意输入,然后返回实际输入的内容

    67330

    Linux系统管理-crond、chkconfig、systemd、unit、target

    10.23 linux任务计划cron crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond...添加/删除服务 首先,在添加服务之前必须把该服务的脚本放到“/etc/init.d/”目录下并添加执行权限。...如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。 Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。...Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。...RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。

    1K20

    Linux 命令(107)—— systemctl 命令

    默认为 replace,除非使用了表示隔离作业模式的 isolate 命令 -i, --ignore-inhibitors 当系统关闭或睡眠请求时,忽略约束锁,否则系统关闭或睡眠请求会失败。...当与 disable 或 mask 一起使用时,单元也将停止 --root=PATH 当与 enable/disable/is-enabled(等相关命令)一起使用时,在查找单元文件时使用指定的根路径...如果单元不处于运行状态,则不进行重启 isolate NAME 启动命令行中指定的单元及其依赖项,并停止所有其他的单元 kill PATTERN... 向单元的一个或多个进程发送信号。...如果至少一个是活动的,则返回退出代码 0,否则为非零 is-failed PATTERN... 检查指定单元是否处于 failed 状态。...如果至少一个是失败的,则返回退出代码 0,否则为非零 status [PATTERN...|PID...] 显示一个或多个单元的简要运行时状态信息,然后是日志中的最新日志数据。

    2.8K20

    systemctl(1) command

    默认为 replace,除非使用了表示隔离作业模式的 isolate 命令 -i, --ignore-inhibitors 当系统关闭或睡眠请求时,忽略约束锁,否则系统关闭或睡眠请求会失败。...当与 disable 或 mask 一起使用时,单元也将停止 --root=PATH 当与 enable/disable/is-enabled(等相关命令)一起使用时,在查找单元文件时使用指定的根路径...如果单元不处于运行状态,则不进行重启 isolate NAME 启动命令行中指定的单元及其依赖项,并停止所有其他的单元 kill PATTERN... 向单元的一个或多个进程发送信号。...如果至少一个是活动的,则返回退出代码 0,否则为非零 is-failed PATTERN... 检查指定单元是否处于 failed 状态。...如果至少一个是失败的,则返回退出代码 0,否则为非零 status [PATTERN...|PID...] 显示一个或多个单元的简要运行时状态信息,然后是日志中的最新日志数据。

    35720

    linux全套教程【黑马】:1

    media opt root sbin srv tmp var boot etc init lib64 mnt proc run snap sys usr /bin: binary...经常使用的命令,比如ls cd,详细见下面 /bin$ ls bash ed lsblk open systemd-inhibit...Linux时使用的一些核心文件,不要改动 /dev:device 存放设备文件,该目录下存放Linux外部设备,一切皆文件,所有硬件外设抽象成一个文件 /etc 保存操作系统或安装软件所需要的配置文件和子目录...4.6 删除文件 rm -i 文件 4.7 复制文件或目录 复制文件 cp 文件1 文件2 会把文件1的内容放到文件2 两种情况: 如果文件2没有,则自动创建并写入文件1的内容 如果文件2存在,则会用文件...但不能返回,q键或ctrl+c退出 4.8.3 less ctrl+p可以往前看一行 ctrl+b往回看一页 ctrl+n可以一行行往前看 ctrl+f往下看一页 4.8.4head默认前10行

    2K62

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

    Centos7 开机第一程序从init完全换成了systemd的启动方式,而systemd依靠unit的方式来控制开机服务,开机级别等功能。...Before=xxx.service # 表示需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。...on-success: # 只有正常退出时(退出状态码为0),才会重启 on-failure: # 非正常退出时,重启,包括被信号终止和超时等 on-abnormal: #...只有被信号终止或超时,才会重启 on-abort: # 只有在收到没有捕捉到的信号终止时,才会重启 on-watchdog: # 超时退出时,才会重启 always:...如果想支持bash语法,需要设置Tyep=oneshot ExecStart: # 启动服务时执行的命令 ExecReload: # 重启服务时执行的命令 ExecStop

    3.1K30

    从 docker 到 runC

    当 docker-containerd 收到 dockerd 启动容器的请求之后,会做一些初始化工作,然后启动 docker-containerd-shim 进程,并将相关配置作为参数传给它。...docker-runc 进程根据配置找到容器的 rootfs 并创建子进程 bash 作为容器中的第一个进程。...当这一切都完成后 docker-runc 进程退出,然后容器进程 bash 由 docker-runc 的父进程 docker-containerd-shim 接管。...也许大家会问,为什么在容器的启动或运行过程中需要一个 docker-containerd-shim 进程呢?把它移除掉整个架构会更简洁也更优美一些!...) 即使在 containerd 和 dockerd 都挂掉的情况下,容器的标准 IO 和其它的文件描述符也都是可用的 向 containerd 报告容器的退出状态 前两点尤其重要,有了它们就可以在不中断容器运行的情况下升级或重启

    64060
    领券