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 / 718309
Accepted
dcom-launch
dcom-launch
Asked: 2022-09-23 09:45:05 +0800 CST2022-09-23 09:45:05 +0800 CST 2022-09-23 09:45:05 +0800 CST

Exigir que o serviço systemd seja iniciado antes de executar o script init.d

  • 772

Eu tenho um script em /etc/rc.d/init.d/ em um sistema Red Hat 7 que é fornecido por um fornecedor. Este script pode ser iniciado e interrompido via systemctl, mas parece não ser realmente um arquivo de unidade do systemd.

O script depende de uma unidade sendo montada na inicialização por um arquivo de unidade systemd. No entanto, esse script de inicialização tenta iniciar antes que a montagem seja concluída, portanto, invariavelmente, falha.

Eu tentei um hack adicionando uma linha ao início do script init, que faz com que o script durma por 30 segundos antes que o resto do script seja executado: sleep 30.

No entanto, a funcionalidade de suspensão não funciona o tempo todo.

Existe alguma maneira de fazer com que esse script de inicialização dependa da conclusão do arquivo da unidade de montagem do systemd? Alguma maneira melhor de realizar essa tarefa do que adicionar um sono ao início do script de inicialização? Obrigado.

rhel systemd
  • 2 2 respostas
  • 17 Views

2 respostas

  • Voted
  1. Best Answer
    meuh
    2022-09-24T06:18:30+08:002022-09-24T06:18:30+08:00

    Os scripts de inicialização do SysV são convertidos automaticamente pelo systemd em arquivos de unidade do systemd. Veja man systemd-sysv-generator. Você gostaria de editar a Unidade gerada para adicionar uma dependência adequada para o ponto de montagem. Você pode fazer isso criando um arquivo "drop-in" com apenas algumas linhas extras. Se o seu arquivo init for chamado, digamos, /etc/rc.d/init.d/mysysv, então a Unidade gerada será chamada mysysv.service. Digite o comando:

    sudo systemctl edit mysysv
    

    e você deve estar no editor escolhido (definir a variável env EDITOR) em um arquivo temporário. Edite o arquivo para conter algo como:

    [Unit]
    # default timeout of 90 secs for dir to be mounted
    JobTimeoutSec=600
    RequiresMountsFor=/path/to/mount
    

    e saia do editor de forma limpa. Isso cria o arquivo /etc/systemd/system/mysysv.service.d/override.conf. Quando você iniciar a mysysvUnidade, esta modificação fará com que o trabalho espere até 600 segundos até que o ponto de montagem tenha algo montado, antes de iniciar. Caso contrário, ele falha com um tempo limite. O tempo de espera padrão para um trabalho é um valor global do sistema de 90 segundos.

    • 1
  2. ron
    2022-09-23T10:39:41+08:002022-09-23T10:39:41+08:00

    aqui está um arquivo systemd de modelo básico

    #!/bin/bash
    
    [Unit]
    Description=license administration
    After=default.target
    
    [Service]
    Type=idle
    ExecStart=/root/scripts/administration.sh
    TimeoutStartSec=0
    
    [Install]
    WantedBy=default.target
    
    • nomeie o acima, my_administration.servicepor exemplo
    • localize-o em/etc/systemd/system/
    • ter permissões root.roote-rw-r--r--
    • então faça umsystemctl daemon-reload
    • então faça um systemctl list-unit-filese você verá my_administration.servicelistado
    • faça umsystemctl enable my_administration
    • após a inicialização, dada a sintaxe acima, o arquivo /root/scripts/administration.shserá executado, assim que o default.targetnível de execução for atingido, que é graphical.target no meu caso porsystemctl get-default
    • meu administration.sharquivo tem permissões root.roote -rwx------; deve ser executável obviamente e esse arquivo eu crio manualmente; esse é meu pequeno script personalizado para fazer coisas depois que o linux for totalmente inicializado.

    veja outros arquivos de serviço do systemd como referência

    consulte o guia do administrador do sistema redhat, Capítulo 10. Gerenciando Serviços com o systemd

    você quer fazer uso

    [Unit]
    Before=
    Wants=
    After=
    Requires=
    

    para obtê-lo, qualquer que seja o seu ExecStart=arquivo, deve acontecer em um determinado momento... antes de outros serviços iniciarem e definitivamente após determinados serviços terem iniciado. E não apenas esses quatro, existem muitos outros que você terá que procurar no guia do administrador do sistema que você fez necessário para fazer o que você deseja acontecer, esses quatro são apenas os mais usados.

    você pode encontrar todos os arquivos de serviço /usr/lib/systemd/system/para usar como referência.

    confira também: https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

    TAMBÉM: em seu script, você também pode fazer algo como

    if mountpoint -q /bkup ;then /usr/bin/rsnapshot daily; fi
    

    No meu /etc/crontabonde faço um backup diário executando rsnapshot , primeiro faço um mountpoint -qpara garantir que meu backup de 10 tb esteja montado e que não faça backup em uma pasta desmontada na partição raiz e falhe meu sistema.

    • 0

relate perguntas

  • linux redhat 7 (ou centos 7) + firewalld mascarar o firewall

  • comando systemctl não funciona no RHEL 6

  • Como instalo o docker no RHEL 7 offline?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Desativar a maximização automática de janelas no Gnome3

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