AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 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

Parada não chamada para o serviço init rc.d

  • 772

Eu tenho um serviço SysVinit muito simples em /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

Quando o sistema inicia, ele inicia o serviço.

Mas quando o sistema para, ele nunca chama o comando stop. A única razão pela qual consigo pensar é que o sistema pensa que o serviço não está em execução ou não foi iniciado corretamente.

Mas quais são os requisitos para isso?

  • Você precisa retornar um código de saída especial para o comando start?
  • Preciso criar um arquivo em /var/lock/subsyspara sinalizar que está ativo?
  • Mais alguma coisa que possa fazer com que o sistema pense que o serviço não foi iniciado?
init
  • 1 1 respostas
  • 28 Views

1 respostas

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

    Parece que a Synology mudou do SysVinit clássico para upstarto DSM 6 ou mais, e depois para systemdo DSM 7. Ambos os sistemas init fornecem compatibilidade com versões anteriores para scripts de início/parada clássicos no estilo SysVinit, mas há algumas peculiaridades das quais você deve estar ciente.

    Se você tiver o DSM 7.0 ou mais recente, depois de instalar o script, provavelmente deverá executar systemctl daemon-reload, portanto systemd-sysv-generator, deverá criar automaticamente um .servicearquivo para ele (talvez em /run/systemd). Em seguida, você pode iniciar seu script com systemctl start <script name>- e, na verdade, deve fazer exatamente isso, em vez de apenas executar o script manualmente. systemdestará ciente da necessidade de executar <your script> stopo trabalho apenas se tiver realmente executado o trabalho inicial correspondente.

    Isso ocorre porque systemdirá configurar cada serviço como um grupo de controle separado de processos à medida que os inicia (e o administrador que executa o script de início manualmente não faz isso).

    Isso é algo completamente invisível para os próprios serviços (a menos que eles o procurem especificamente), e qualquer processo filho dos serviços herdará essa participação no grupo de controle. Se um grupo de controle não tiver mais processos nele, ele deixará de existir automaticamente.

    Ao desligar, systemdele apenas passará pelos grupos de controle existentes e executará o comando de parada para qualquer grupo de controle não padrão que encontrar. Quaisquer serviços iniciados sem uso systemctl startfarão parte do grupo de controle "sessão interativa do administrador" em vez do grupo de controle "serviço X" e serão basicamente eliminados sem executar o script de parada correspondente.

    Se você precisar de recursos como uma reinicialização automática para o seu serviço se ele morrer por algum motivo, considere usar o método de configuração "nativo" apropriado para o sistema init aplicável:

    • /etc/init/*arquivos para Upstart na série Synology DSM 6.x
    • /etc/systemd/system/*.servicearquivos para systemd na série Synology DSM 7.x e mais recente. Esses sistemas init têm recursos integrados de reinicialização automática que você pode usar com apenas um pouco de configuração, em vez de ter que escrever um script wrapper para observar o processo do serviço por conta própria.

    Guia do desenvolvedor para Synology DSM 7

    Guia do desenvolvedor para Synology DSM 6

    Notas possivelmente úteis sobre a configuração de serviços para DSM 6 e 7

    • 1

relate perguntas

  • Quando o S99 será lançado se não estiver em um formato normal?

  • Abrindo partição UBI bruta para gravação no Linux se estiver montada e usada pelo init

  • Entendendo o comando de desligamento no inittab

  • O openrc do Gentoo trava para sempre em "caching service dependencies..."

  • Imprima uma mensagem um determinado número de vezes, logo após a inicialização do sistema (init) em um sistema sem GUI [duplicado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve