Como alterar a ordem de inicialização / inicialização dos serviços Linux?

Respostas:

11

Você pode alterar a ordem renomeando os links simbólicos em /etc/rcX.d/, em que x será o seu nível de execução.

Você verá vários arquivos começando com Sxx ou Kxx. Os links S são rastreados durante a inicialização, enquanto os K são analisados ​​para desligamento. O xx aqui representa a ordem.

Mas esse pedido é definido por um motivo, portanto, tenha cuidado ao alterá-los. Por exemplo. O ntpd deve iniciar somente após a inicialização do subsistema de rede.

trapos
fonte
21

Em vez de fazê-lo manualmente, como sugerido nas outras respostas, você também pode alterar o script init. Basta adicionar uma linha ao cabeçalho:

# chkconfig: 35 90 10

Isso instruirá chkconfiga adicionar o serviço aos níveis de execução 3 e 5, com uma posição inicial de 90 e uma posição final de 10.

cristão
fonte
Este. Absolutamente isso. Se você renomear manualmente os links simbólicos você vai ter uma surpresa se alguém vem e correchkconfig off servicename && chkconfig on servicename
batfastad
Funcionou como um encanto. Eu precisava configurar dependências entre o mysqld e um contêiner de servlet. Não consegui descobrir a posição inicial do mysqld, então configurei a posição inicial do contêiner do servlet para 99 e funciona muito bem, o mysqld é iniciado primeiro. Obrigado.
Jpangamarca
7

Você quer ler um pouco sobre os diretórios runlevels e rc.d. Dentro dos diretórios rc.d, você pode encontrar os links S e K, como o S20apache K10apache, que é basicamente o que ordena a inicialização / desligamento de scripts.

Existem algumas mudanças sendo feitas nessa arquitetura, mas a maioria dos linuxes ainda a está usando.

coredump
fonte
Estou surpreso que a maioria das distros ainda use esse sistema; sistemas melhores rcorderjá existem há algum tempo.
Chris S
Eu meio que invejar solaris svc, mas poderia fazer sem as coisas xml
coredump
Este é o local. Dependendo da sua distribuição, no entanto, você pode ter maneiras diferentes de alterar esse valor - portanto, leia a documentação específica da sua distribuição.
Andrew M.
1
Algumas distribuições, como o Ubuntu, usam Upstart ( Wikipedia ).
Pausado até novo aviso.
7

Se você chegou aqui, é provável que tenha dois serviços em que um depende do outro, mas, como eles estão começando na ordem errada, aquele com a dependência está falhando ao iniciar. As sugestões sobre a edição dos links simbólicos são informativas, em termos de ilustração de como a sequência de inicialização é executada, e funcionariam bem até que alguém fizesse um "chkconfig on" em seu serviço, no ponto em que os links simbólicos seriam recriados como originalmente. Realmente, você quer lidar com o problema no nível do script init, que é realmente muito menos complicado de fazer. Também será consistente nos diferentes níveis de execução. Você provavelmente não precisará adicionar uma linha "# chkconfig" como sugerido na resposta 4, pois provavelmente já haverá uma linha semelhante.

Vou usar um exemplo de servidor executando o Openldap (slapd) com um banco de dados MySQL (mysqld). A configuração desse par, e por que você pode querer, é outra história.

Na inicialização, o Openldap falha ao iniciar porque depende do MySQL e a sequência de inicialização tenta iniciar antes dele - slapd tem a posição 27 e mysqld a posição 64

Os links simbólicos relevantes em /etc/rc3.d/ são

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

Eu procuro valores definidos nos dois scripts init:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

Eu edito a linha chkconfig em /etc/rc.d/init.d/slapd para ter uma posição inicial maior que a de /etc/rc.d/init.d/mysqld (eu escolhi 85)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

Eu faço "chkconfig slapd on" e checo novamente os links simbólicos

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

Agora, quando este servidor inicia, o mysqld inicia antes do slapd e está tudo certo com o mundo.

Jim Smyth
fonte