5 votes

Est-il sûr de changer le niveau d'exécution dans un cron script ?

Je veux faire un "hotclone" nocturne du serveur A vers le serveur B. Il est recommandé que le serveur B exécute un minimum de démons pendant cette action. Je veux donc créer un niveau d'exécution "minimal" qui n'exécute pratiquement que sshd et basculer vers/depuis ce niveau d'exécution au milieu descript, c'est à dire :

# do some stuff ...

# take services down
telinit 2

# do backup ...

# bring services back up
telinit 3

# do post-backup stuff ...

Je veux faire un changement de niveau d'exécution plutôt que de démarrer/arrêter explicitement les services afin de pouvoir utiliser le même script sur un certain nombre de machines configurées différemment (différents services, certains sur systemv-init certains sur systemd). Je veux garder tout cela dans un script pour la maintenabilité plutôt que de créer un tas de nouveaux script de démarrage/arrêt initd/systemd.

Donc la nature de la question est : * Telinit arrêtera-t-il le script (supposons que le cron est dans les deux niveaux d'exécution) ? * Telinit attend-il l'achèvement ou revient-il immédiatement ? * Si ce qui précède fonctionne, est-il "sûr" de le faire ou y a-t-il des problèmes potentiels avec cette approche ? * Y a-t-il un meilleur moyen disponible en utilisant un seul script (à nouveau, je préférerais éviter d'installer un tas de nouveaux script d'init afin que cette chose soit largement "autonome" et portable).

0 votes

Ce serait vraiment facile à tester - pourquoi ne l'avez-vous pas fait dans un laboratoire ou sur une machine virtuelle jetable bon marché ?

1 votes

Je peux le faire, mais cela ne me donnerait pas une réponse définitive à la partie "est-ce sûr" de la question jusqu'à ce que quelque chose tourne mal. Ce script doit être exécuté sur des boîtes de production en direct. Je suppose que quelqu'un ici a déjà fait quelque chose de ce genre.

2 votes

Je ne pense pas que vous obtiendrez une réponse définitive et même si quelqu'un dit que cela fonctionne pour lui, il n'y a aucune garantie que cela fonctionnera pour vous. Vous devez de toute façon le tester car votre environnement est différent de celui des autres et vous pouvez avoir un cas particulier. D'après mon expérience de la SF, les questions obtiennent généralement des réponses assez rapidement si les gens ont déjà fait quelque chose comme ça avant, donc je suppose que ce n'est pas une chose courante.

8voto

user9517 Points 113163

J'ai créé le script suivant

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

et l'a installé dans cron

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

C'est la sortie

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

Comme vous pouvez le voir, le script continue de fonctionner. Quant à la sécurité de ceci, vous seul pouvez décider en fonction de vos tests dans votre environnement.

2 votes

Merci pour le who -r exemple. Je ne connaissais pas celui-là.

4voto

Hunter Eidson Points 493

Sur un ancien système HP-UX, nous avions l'habitude de faire des sauvegardes à froid de nos bases de données chaque nuit en utilisant les changements de niveau d'exécution. La base de données démarrait et s'arrêtait au niveau d'exécution 4, et faisait essentiellement un telinit 3, prenait des instantanés des disques, telinit 4, commençait à sauvegarder les disques. C'est une stratégie légèrement différente de celle que vous envisagez, mais à toutes fins utiles, elle se comportera de la même manière.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X