Anomalie #3138
Interblocage entre sauvegarde et mise à jour
0%
Description
Erreur de sauvegarde du catalogue bacula:
Log bacula:
22-Mar 03:19 127.0.0.1-dir JobId 422: Warning: FileSet MD5 digest not found.
22-Mar 03:19 127.0.0.1-dir JobId 422: Start Backup JobId 422, Job=JobSchedulePost.2012-03-22_03.19.00_29
22-Mar 03:19 127.0.0.1-dir JobId 422: Using Device "FileStorage"
22-Mar 03:19 127.0.0.1-fd JobId 422: shell command: run ClientRunBeforeJob "/usr/share/eole/schedule/schedule_bacula post"
22-Mar 03:19 127.0.0.1-fd JobId 422: shell command: run ClientRunBeforeJob "/usr/share/eole/bacula/baculaconfig.py --lock --backup_progress --jobType=cron"
22-Mar 03:19 127.0.0.1-fd JobId 422: ClientRunBeforeJob: Un verrou autre que celui de la sauvegarde est placé
22-Mar 03:19 127.0.0.1-fd JobId 422: Error: Runscript: ClientRunBeforeJob returned non-zero status=1. ERR=Child exited with code 1
22-Mar 03:19 127.0.0.1-dir JobId 422: Fatal error: Bad response to ClientRunBeforeJob command: wanted 2000 OK RunBefore
, got 2905 Bad RunBeforeJob command.
22-Mar 03:19 127.0.0.1-dir JobId 422: Fatal error: Client "127.0.0.1-fd" RunScript failed.
Maj :
/etc/cron.d/schedule -> #EOLE don't touch this file; 19 3 * * * root python /usr/share/eole/schedule/schedule cron >> /var/log/schedule.log 2>&1
Demandes liées
Révisions associées
Lien problématique entre la sauvegarde et la mise à jour.
- tmpl/bacula-dir.conf : passage de l'appel à schedule_bacula post après
la fin du job (au lieu d'avant) pour limiter les problèmes
d'annulation de mise à jour en cas de job de sauvegarde en cours.
Ref #3138
Lien problématique entre la sauvegarde et la mise à jour.
- eole/schedule/schedule : ajout de la vérification de tâche en cours
pour bacula avant de lancer la mise à jour.
- eole/schedule/schedule_bacula : appel de schedule par l'intermédiaire
de la commande at en post pour que le processus ne soit pas lié à
bacula et que jobpostschedule ne soit pas en erreur avec le
redémarrage de bacula consécutif à la mise à jour.
Ref #3138
Quote escaping; fixes #3138
Historique
#1 Mis à jour par Yoni Baude il y a environ 12 ans
- Version cible mis à Mises à jour 2.3.4 RC
Est-il possible de modifier la valeur de maj du serveur ?
Comment sont gérés les conflits entre la maj et la sauvegarde?
Quelle est la plage horaire dela programmation aléatoire des maj?
Faut-il que la sauvegarde soit programmée que après la maj?
#2 Mis à jour par Daniel Dehennin il y a environ 12 ans
- Version cible changé de Mises à jour 2.3.4 RC à Mises à jour 2.3.5 RC
Pour un bacula/eole-schedule master
#3 Mis à jour par Emmanuel GARETTE il y a environ 12 ans
Pour complèter ... je n'ai pas pu reproduite le blocage via des locks. Les locks se mettent même après le schedule (ce qui n'a pas d'intérêt).
Il y a un gros soucis dans la méthode actuelle ... c'est que lorsqu'une mise à jour se fait, un reconfigure est lancé. Ce qui arrête redémarre tous les services (dont bacula). La tâche ne se fini alors jamais :/
Il faudrait que la mise à jour se fasse APRES bacula. Je pense qu'un script lancé par un "at" serait suffisant, mais il faut bien le lancer après.
#4 Mis à jour par Emmanuel GARETTE il y a environ 12 ans
J'ai finalement trouvé. Un try catch le sys.exit(). Donc même si le schedule est annulé, la mise à jour se fait quand même.
Un patch pour résoudre ce soucis ...
--- /tmp/schedule 2012-04-15 10:34:28.548337549 +0200 +++ /usr/share/eole/schedule/schedule 2012-04-15 10:36:22.846449065 +0200 @@ -78,6 +78,10 @@ sys.exit(0) try: baculajobs = load_bacula_jobs(check_active=False) + load_bacula = True + except: + load_bacula = False + if load_bacula: for job in baculajobs: day = int(job['day']) if job['job'] == 'daily': @@ -90,9 +94,8 @@ if WEEK_DAY == day and MONTH_DAY < 8: exit_not_cron() else: - raise Exception('Job inconnu {0}'.format(job['job'])) - except: - pass + print 'Job inconnu {0}'.format(job['job']) + sys.exit(1) run_runparts('daily', 'pre') run_runparts('daily', 'post')
Mais cela ne résoud pas le problème de fond (le Maj-Auto devrait être lancé APRÈS).
#5 Mis à jour par Benjamin Bohard il y a environ 12 ans
Voici une autre solution possible :
diff --git a/eole/schedule/schedule b/eole/schedule/schedule index af56af9..8f109af 100755 --- a/eole/schedule/schedule +++ b/eole/schedule/schedule @@ -91,6 +91,8 @@ def schedule_cron(): exit_not_cron() else: raise Exception('Job inconnu {0}'.format(job['job'])) + except SystemExit: + raise except: pass run_runparts('daily', 'pre')
#6 Mis à jour par Benjamin Bohard il y a presque 12 ans
- Statut changé de Nouveau à Fermé
La résolution de la demande liée devrait répondre également à cette demande.