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 / server / Perguntas / 759569
Accepted
hookenz
hookenz
Asked: 2016-02-25 13:00:38 +0800 CST2016-02-25 13:00:38 +0800 CST 2016-02-25 13:00:38 +0800 CST

É possível que um script filho grave a saída em um processo pai?

  • 772

Eu tenho um script de notificação iniciado pelo processo daemon keepalived sempre que seu estado muda.

O problema é que a saída de eco do meu script de notificação não aparece na saída exibida ao executar keepalived com a opção -l (registrar no console local)

Normalmente, eu poderia gravar essa saída em um arquivo e isso seria uma boa solução, exceto que, neste caso, o daemon keepalived está sendo executado em um contêiner docker e eu quero que o daemon docker veja o log de todas as saídas, incluindo as da minha notificação roteiro.

Isto é o que eu tentei para o meu script de notificação:

#!/bin/bash

MY_PPID=$(ps -o ppid= $$)
MY_PPID=${MY_PPID// }

function echo
{
  builtin echo $(date +"%b %e %H:%M:%S"): $1 >> /proc/${MY_PPID}/fd/0
}

echo "Notify state=$3"

E a saída do keepalived:

Starting VRRP child process, pid=8847
Interface queue is empty
No such interface, ib0
No such interface, ib1
No such interface, docker0
Interface queue is empty
No such interface, ib0
Registering Kernel netlink reflector
No such interface, ib1
No such interface, docker0
Registering Kernel netlink command channel
Registering gratuitous ARP shared channel
Registering Kernel netlink reflector
Initializing ipvs 2.6
Registering Kernel netlink command channel
Opening file '/etc/keepalived/keepalived.conf'.
Configuration is using : 5879 Bytes
Opening file '/etc/keepalived/keepalived.conf'.
Configuration is using : 61747 Bytes
Using LinkWatch kernel netlink reflector...
Using LinkWatch kernel netlink reflector...
VRRP_Instance(vip) Transition to MASTER STATE
VRRP_Instance(vip) Entering MASTER STATE
Opening script file /etc/keepalived/notify.sh

Se funcionasse, eu esperaria ver uma linha adicional:

Notify state=MASTER

Mas obviamente não funcionou. Alguma idéia de como eu poderia fazer isso funcionar corretamente?


Acho que encontrei o problema. MY_PPID não existe mais como um processo. Parece que, ao executar o script, o processo keepalived faz uma bifurcação dupla para desanexar o script. Quando escrevo no fd de um dos processos de manutenção de vida, ele funciona. Posso obter o pid do arquivo /var/run/keepalived.pid.

Vou tentar isso e retorno.

bash
  • 2 2 respostas
  • 1472 Views

2 respostas

  • Voted
  1. Douglas P.
    2016-02-25T14:59:53+08:002016-02-25T14:59:53+08:00

    Por quê /proc/${MY_PPID}/fd/0? Geralmente é a saída do console...

    Você pode identificar o arquivo de log no /proc/${MY_PPID}/fd/processo do supervisord?

    • 0
  2. Best Answer
    hookenz
    2016-02-25T15:41:10+08:002016-02-25T15:41:10+08:00

    Acontece que não funciona porque keepalived faz um fork duplo antes de chamar exec no script filho. Portanto, MY_PPID não é mais um ID de processo válido.

    A solução é obter o id correto usando o arquivo /var/run/vrrp.pid.

    Isso funciona:

    #!/bin/bash
    
    TYPE=$1
    NAME=$2
    STATE=$3
    
    # Get PID for keepalive
    KA_PID=$(<"/var/run/vrrp.pid")
    
    function echo
    {
      # Send script output directly to keepalived
      builtin echo $(date +"%b %e %H:%M:%S"): "$0": $1 > "/proc/${KA_PID}/fd/1"
    }
    
    
    echo "$TYPE $NAME $STATE"
    
    • 0

relate perguntas

Sidebar

Stats

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

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 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