Como adicionar um script à inicialização e desligamento no debian?

12

o título resume bastante.

como adiciono um startup.sh e shutdown.sh do meu aplicativo de servidor à sequência de inicialização e desligamento do sistema operacional Debian?

Amir Arad
fonte

Respostas:

15

No Debian, os scripts de inicialização e desligamento de serviços e aplicativos devem ser colocados /etc/init.d/.

O Debian fornece um exemplo de script /etc/init.d/skeletonque você pode modificar a seu gosto para sua aplicação específica.

Depois de instalado, ligue para:

# update-rc.d YOURAPP defaults

Para que o Debian adicione os /etc/rc?.d/links simbólicos para você.

Se você preferir um menu ou interface gráfica, dê uma olhada no pacote sysv-rc-confou ksysv.

MikeyB
fonte
4

Você pode chamar seu script em /etc/rc.local , antes da linha que diz exit 0

Quanto ao encerramento do seu aplicativo, sugiro colocar um script em /etc/rc0.d . Você precisa nomeá-lo com K maiúsculo e, em seguida, um número de 2 dígitos que especifica a ordem em que esses scripts são executados e, em seguida, um nome. Ele será chamado com um parâmetro "stop", mas você pode ignorá-lo para um script de parada simples.

Brent
fonte
Por que você mexeria com o rc.local quando já tem que mexer com o /etc/rcX.d?
womble
O rc.local é o local apropriado para coisas simples de inicialização - não precisa lidar com parâmetros de início / parada, etc. Mas não tem a capacidade de desligar um processo. O material rc0.d é um pouco complicado.
Brent
3

Para a inicialização, dê uma olhada nisso .

Para encerrar, crie um link / copie seu script em uma das pastas /etc/rcX.d em que X é o nível de execução em que você deseja que ele seja executado. 0 é o nível de execução de desligamento do Debian, acredito.

squillman
fonte
Esta é a informação de desligamento que eu precisava. Obrigado por isso, @squillman.
harperville
1

O mais fácil é modificar os scripts existentes, funciona no meu sistema, usado para sons :)

  • inicie, modifique /etc/init.d/rc.local, adicione seu sh no final do arquivo, antes: (ele será executado imediatamente antes do login na "tela")
  • shutdown, modifique /etc/init.d/halt, adicione seu sh no início do arquivo, logo após os comentários iniciais (ele será executado antes do comando shutdown real, chamado por este arquivo de script
  • reiniciar, o mesmo que o desligamento, mas em /etc/init.d/reboot
chickensk
fonte
1

Desde o Debian Jessie, o initprograma antigo foi substituído por systemd!

Confira você mesmo. Execute: ls -l /sbin/inite veja o que está apontando. Atualmente, aponta para systemd( /sbin/init -> /lib/systemd/systemd), um programa de inicialização mais novo e melhor.


ASSIM, AS ESCOLHAS E OUTRAS RESPOSTAS AQUI ESTÃO ATUALIZADAS !!!


* Embora você ainda possa instalar scripts da maneira antiga com as ferramentas do System-V, não é uma boa idéia de um modo geral.

man systemd.service diz: *

Se um serviço for solicitado com um determinado nome, mas nenhum arquivo de configuração da unidade for encontrado, o systemd procurará um script de inicialização do SysV com o mesmo nome ... e criará dinamicamente uma unidade de serviço a partir desse script. Isso é útil para compatibilidade com o SysV. Observe que essa compatibilidade é bastante abrangente, mas não 100%.


Para sistemas Debian mais novos (ou seja, Jessie, Stretch, Buster, etc ...)

É mais fácil do que você pensa. (-:

Aqui está o método novo e preferido para instalar programas de inicialização ou desligamento.

Com systemdvocê primeiro deseja criar um arquivo de unidade . Um arquivo de unidade é principalmente declarações, não código.

Em seguida, você usará o systemctlcomando para ativar ou iniciar essa unidade.

systemdfaz grande parte do trabalho para você, facilitando, por exemplo, que um programa crítico seja reiniciado automaticamente se travar ou for morto. Além disso, ele desliga o programa onde e quando deveria, por padrão, sem trabalho extra de sua parte.


Comece a aprender systemdaqui:

De Debian e em outros lugares e etc e etc .


Páginas de manual para começar:

man systemd.unit - Sobre arquivos de unidades em geral
man systemd.service - Sobre arquivos de unidades de serviço, por exemplo, daemons e programas de execução única.

man systemctl - Interface de usuário da linha de comando
man journalctl- Veja o log do que systemd fez

man systemd - Sobre o próprio programa init


Há também uma variedade de outros tipos de arquivos de unidades, por exemplo

man systemd.target - para grupos e destinos sincronizados comuns.

Depois de digerir o básico acima, man -k systemdprocure em outras páginas do manual relacionadas.



Faça o que fizer, no Debian não use nenhum destes :

  • update-rc.d - instalar e remover links de script init do estilo System-V
  • sysv-rc-conf - Configuração em nível de execução para SysV como links de script init
  • runlevel - Imprima o nível de execução SysV anterior e atual
  • BUM- B oot U p M anager - um editor de nível de execução gráfica
  • systemadm- Interface gráfica para o gerente de sistema e serviço systemd
    (BTW, o autor me disse por e-mail que está muito quebrado agora).


UM EXEMPLO:

Esse arquivo de unidade inicia o daemon NoIP.com quando eu inicializo e o encerra quando eu desligo.

Este daemon, de tempos em tempos, envia o meu endereço IP atual para atualizar meu DDNS ( D inâmica DNS ( D OMain N ame S erver)) base de dados do provedor, mantendo assim o meu nome de domínio que aponta no meu computador onde quer que ele viaja para.

Os arquivos desta unidade estão localizados no meu sistema neste arquivo de configurações: /etc/systemd/system/noip2.service

Aqui está o que está no arquivo da unidade:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Execute manualmente um arquivo de unidade (por exemplo, para teste):

  • comece com $ sudo systemctl start noip2.
  • reinicie com $ sudo systemctl restart noip2.
  • pare com $ sudo systemctl stop noip2.

Configure o sistema para executar automaticamente um arquivo de unidade ao iniciar ou desligar:

  • comece a usar com $ sudo systemctl enable noip2.
  • terminar usando com $ sudo systemctl disable noip2.

Visualizar log

  • $ sudo journalctl -u noip2
Vista elíptica
fonte