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.
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á chamadamysysv.service
. Digite o comando: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:
e saia do editor de forma limpa. Isso cria o arquivo
/etc/systemd/system/mysysv.service.d/override.conf
. Quando você iniciar amysysv
Unidade, 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.aqui está um arquivo systemd de modelo básico
my_administration.service
por exemplo/etc/systemd/system/
root.root
e-rw-r--r--
systemctl daemon-reload
systemctl list-unit-files
e você verámy_administration.service
listadosystemctl enable my_administration
/root/scripts/administration.sh
será executado, assim que odefault.target
nível de execução for atingido, que é graphical.target no meu caso porsystemctl get-default
administration.sh
arquivo tem permissõesroot.root
e-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
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
No meu
/etc/crontab
onde faço um backup diário executando rsnapshot , primeiro faço ummountpoint -q
para 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.