É seguro alterar o runlevel dentro de um script cron?

5

Eu quero fazer um "hotclone" noturno do servidor A para o servidor B. É recomendado que o servidor B esteja executando daemons mínimos durante essa ação, então eu quero criar um nível de execução "mínimo" que praticamente só roda o sshd e mude para / desse runlevel no meio do script, ou seja:

# do some stuff ...

# take services down
telinit 2

# do backup ...

# bring services back up
telinit 3

# do post-backup stuff ...

Eu quero fazer um comutador de nível de execução em vez de iniciar / interromper explicitamente os serviços para que eu possa usar o mesmo script em várias máquinas configuradas de forma diferente (serviços diferentes, alguns no systemv-init e no systemd). Eu quero manter tudo em um script para manutenção, ao invés de criar um monte de novos scripts start / stop do initd / systemd.

Portanto, a natureza da pergunta é: * Será que o telinit irá parar o script (suponha que o cron esteja em ambos os runlevels)? * O telinit aguarda a conclusão ou retorna imediatamente? * Se o trabalho acima é "seguro" para fazer ou são os potenciais problemas com a abordagem? * Existe uma maneira melhor disponível usando um único script (novamente eu prefiro evitar a instalação de um monte de novos scripts de init, então isso é em grande parte "auto-suficiente" e portátil)

    
por SpliFF 13.03.2014 / 05:22

2 respostas

8

Eu criei o seguinte script

#!/bin/bash
date
who -r
/sbin/telinit 2
who -r
/sbin/telinit 3
who -r
date

e instalou no cron

* * * * * /home/iain/test &>>/tmp/test.out

É a saída

Thu Mar 20 03:06:01 EDT 2014
         run-level 3  2014-03-20 03:05                   last=2
         run-level 2  2014-03-20 03:06                   last=3
         run-level 3  2014-03-20 03:06                   last=2
Thu Mar 20 03:06:01 EDT 2014

Como você pode ver, o script continua em execução. Quanto à segurança disso, só você pode decidir com base nos seus testes em seu ambiente.

    
por 20.03.2014 / 08:08
5

Em um antigo sistema HP-UX, costumávamos fazer backups frios de nossos bancos de dados todas as noites usando alterações de nível de execução. Tivemos o banco de dados iniciado e paramos no nível de execução 4, e basicamente fizemos um telinit 3, tiramos instantâneos dos discos, telinit 4, começamos a fazer o backup dos discos. É uma estratégia ligeiramente diferente da sua, mas para todos os efeitos, ela se comportará da mesma forma.

    
por 21.03.2014 / 16:30

Tags