AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 743237
Accepted
Maestro
Maestro
Asked: 2023-04-18 11:28:27 +0800 CST2023-04-18 11:28:27 +0800 CST 2023-04-18 11:28:27 +0800 CST

停止未调用 init rc.d 服务

  • 772

我有一个非常简单的 SysVinit 服务/etc/rc.d:

#!/bin/bash

PIDFILE="/var/run/test.pid"

status() {
  if [ -f "$PIDFILE" ]; then
    echo 'Service running'
    return 1
  fi
  return 0
}

start() {
  if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")"; then
    echo 'Service already running'
    return 1
  fi
  echo 'Starting...'
  test & echo $! > "$PIDFILE"
  return 0
}

stop() {
  if [ ! -f "$PIDFILE" ] || ! kill -0 "$(cat "$PIDFILE")"; then
    echo 'Service not running'
    return 1
  fi
  echo 'Stopping...'
  kill -15 "$(cat "$PIDFILE")" && rm -f "$PIDFILE"
  return 0
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac

当系统启动时,它会启动服务。

但是当系统停止时,它永远不会调用停止命令。我能想到的唯一原因是系统认为该服务未运行或未正确启动。

但是这样做有什么要求呢?

  • 您是否需要为启动命令返回一个特殊的退出代码?
  • 我需要创建一个文件来/var/lock/subsys表明它是活动的吗?
  • 还有什么可能导致系统认为服务没有启动?
init
  • 1 1 个回答
  • 28 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2023-04-19T04:42:06+08:002023-04-19T04:42:06+08:00

    看起来 Synology 从经典的 SysVinit 转移到upstartDSM 6 左右,然后转移到systemdDSM 7。这两个初始化系统都为经典的 SysVinit 风格的启动/停止脚本提供向后兼容性,但您应该注意一些怪癖。

    如果您有 DSM 7.0 或更新版本,那么在安装脚本后您可能应该运行systemctl daemon-reload,因此systemd-sysv-generator应该自动.service为它创建一个文件(可能在 中/run/systemd)。然后你可以用systemctl start <script name>- 开始你的脚本,实际上应该这样做,而不是仅仅手动运行脚本。只有当它实际执行了相应的启动作业时systemd,才会意识到需要运行作业。<your script> stop

    这是因为在启动时systemd会将每个服务设置为单独的进程控制组(管理员手动运行启动脚本不会这样做)。

    这是服务本身完全不可见的东西(除非他们专门去寻找它),并且服务的任何子进程都将继承此控制组成员身份。如果控制组中没有进程,它将自动不复存在。

    关闭时,systemd将只遍历现有的控制组,并对它找到的任何非默认控制组运行停止命令。任何在没有使用的情况下启动的服务systemctl start都将成为“管理员的交互式会话”控制组的一部分,而不是“服务 X”控制组的一部分,并且实际上将在不运行相应的停止脚本的情况下被杀死。

    如果您需要在服务因某种原因终止时自动重启等功能,您应该考虑为适用的初始化系统使用适当的“本机”配置方法:

    • /etc/init/*Synology DSM 6.x 系列中 Upstart 的文件
    • /etc/systemd/system/*.serviceSynology DSM 7.x 系列及更新版本中 systemd 的文件。这些 init 系统具有内置的自动重启功能,您只需进行一些配置即可使用,而不必自己编写包装脚本来监视您的服务进程。

    Synology DSM 7 开发者指南

    Synology DSM 6 开发者指南

    有关为 DSM 6 和 7 配置服务的可能有用的说明

    • 1

相关问题

  • 如果不是正常形式,S99 什么时候推出?

  • 如果它已被 init 挂载和使用,则打开原始 UBI 分区以在 Linux 上写入

  • 了解 inittab 中的关闭命令

  • Gentoo 的 openrc 永远挂在“缓存服务依赖项......”

  • 在无 GUI 系统中的系统启动(初始化)后立即打印给定次数的消息 [重复]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve