Exécuter un script avant d'arrêter Debian 9

Venez nous en parler, c'est ici que l'on vous conseillera !

Exécuter un script avant d'arrêter Debian 9

Messagede JMarc » Mer 06 Déc 2017, 21:53

A l'extinction de mon poste sous Debian 9 j'aimerais lancer le script de sauvegarde placé dans /etc/init.d à cet effet. Je suppose qu'il faut au préalable, du réseau, le système de fichier local et le système distant (un sshfs), ce qui se trouve dans les rubriques correspondantes de l'en-tête du script.
Code: Select All Code
#!/bin/bash
### BEGIN INIT INFO
# Provides:          backup
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     0
# Default-Stop:     
# Should-Start:     
# Should-Stop:       
# Short-Description: start backupZ script
### END INIT INFO


# Etablir liste de fichiers modifiés il y moins de n jour (s)
find /home/ -mtime -1 -type f > /tmp/listMAJ

# Créer archive compressée à partir de cette liste et chiffre le document

tar -cjvf /tmp/backup.tar.bz2 -T /tmp/listMAJ

# Se connecter au serveur
mount /media/zdisk 2> /dev/null

# Temporisation pour établir la liaison
sleep 5

# Vérifier sa présence

if [ ! -e "/media/zdisk/test" ]
   then
      (echo 'Pas se serveur en ligne - arret du script'; date) >> /var/log/backup.log
   exit
fi

# Lance le transfert

mv -f /tmp/backup.tar.bz2 /media/zdisk/

umount /media/zdisk


Selon divers sites consultés il convient ensuite de créer le lien symbolique dans le rc.d du niveau de fonctionnement (runlevel) demandé, à l'aide de :
Code: Select All Code
sudo update-rc.d backupZ defaults

Le script apparaît alors bien dans rc0.d avec le préfixe @S01 mais ne s'exécute pas...

Qu'est ce que j'ai raté ?

Merci pour vos lumières
JMarc
 
Messages: 7
Inscription: Dim 27 Nov 2016, 14:15
Distribution: Debian

Re: Exécuter un script avant d'arrêter Debian 9

Messagede juice » Jeu 07 Déc 2017, 00:37

Bonjour.

Ne faudrait-il pas passer les commandes d’exécution par les fonctions start | stop etc. ? comme pour
les autres services ?

Pour la sauvegarde j’ai personnellement une préférence pour rsync.
juice
 
Messages: 189
Inscription: Dim 29 Juin 2008, 10:06
Localisation: Oberentzen
Distribution: Archlinux
Niveau: à bulle ?

Re: Exécuter un script avant d'arrêter Debian 9

Messagede JMarc » Jeu 07 Déc 2017, 08:25

Bonjour,

J'utilise également rsync de manière locale pour synchroniser deux arborescences de dossiers. Mais dans le cas présent il s'agit de transférer une archive par jour vers un site distant ; c'est pour cette raison que j'ai opté pour la commande mv.
Quant aux fonctions start|stop de la séquence de boot de systemd, j'avais compris qu'elles étaient définies dans les lignes Default-Start et Default-Stop de l'en-tête du script.
JMarc
 
Messages: 7
Inscription: Dim 27 Nov 2016, 14:15
Distribution: Debian

Re: Exécuter un script avant d'arrêter Debian 9

Messagede juice » Ven 08 Déc 2017, 00:26

OK. Il se pourrait que la ligne # Required-Start soit à laisser vide car le script n’est lancé qu’au shutdown.

Le nom de ton script et de # Provide ne sont pas en concordance :

sudo update-rc.d backupZ defaults et # Provides: backup

Cela aurait-il une incidence ? Regarde les autres scripts pour voir comment ils sont faits.
juice
 
Messages: 189
Inscription: Dim 29 Juin 2008, 10:06
Localisation: Oberentzen
Distribution: Archlinux
Niveau: à bulle ?

Re: Exécuter un script avant d'arrêter Debian 9

Messagede JMarc » Ven 08 Déc 2017, 10:49

De fait, il n'y a que des scripts K01 (kill) dans rc0.d... et donc mon script S01backupZ n'y avait probablement pas sa place.

Voici par exemple celui du daemon du scanner que l'on trouve au démarrage ( rc 2 3 4 5.d) et à l'arrêt (rc 0 1 6.d)
Mais je n'y comprends pas tout...

Code: Select All Code
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:          saned
# Required-Start:    $syslog $local_fs $remote_fs
# Required-Stop:     $syslog $local_fs $remote_fs
# Should-Start:      dbus avahi-daemon
# Should-Stop:       dbus avahi-daemon
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SANE network scanner server
# Description:       saned makes local scanners available over the
#                    network.
### END INIT INFO

. /lib/lsb/init-functions

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/saned
NAME=saned
DESC="SANE network scanner server"

test -x $DAEMON || exit 0

RUN=no
RUN_AS_USER=saned

# Get lsb functions
. /lib/lsb/init-functions

# Include saned defaults if available
if [ -f /etc/default/saned ] ; then
    . /etc/default/saned
fi

if [ "x$RUN" != "xyes" ] ; then
    log_success_msg "$NAME disabled; edit /etc/default/saned"
    exit 0
fi

DAEMON_OPTS="-a $RUN_AS_USER"

set -e

case "$1" in
  start)
   log_daemon_msg "Starting $DESC" "$NAME"
   start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
      --exec $DAEMON -- $DAEMON_OPTS
   log_end_msg $?
   ;;
  stop)
   log_daemon_msg "Stopping $DESC" "$NAME"
   start-stop-daemon --stop --oknodo --quiet --pidfile /var/run/$NAME.pid \
      --retry --exec $DAEMON
   log_end_msg $?
   ;;
  force-reload)
   # check whether $DAEMON is running. If so, restart
   start-stop-daemon --stop --test --quiet --pidfile \
      /var/run/$NAME.pid --exec $DAEMON \
   && $0 restart \
   || exit 0
   ;;
  restart)
   log_daemon_msg "Restarting $DESC" "$NAME"
   $0 stop
   $0 start
   ;;
  status)
   if [ -s /var/run/$NAME.pid ]; then
            RUNNING=$(cat /var/run/$NAME.pid)
            if [ -d /proc/$RUNNING ]; then
                if [ $(readlink /proc/$RUNNING/exe) = $DAEMON ]; then
                    log_success_msg "$NAME is running"
                    exit 0
                fi
            fi

            # No such PID, or executables don't match
            log_failure_msg "$NAME is not running, but pidfile existed"
            rm /var/run/$NAME.pid
            exit 1
        else
            rm -f /var/run/$NAME.pid
            log_failure_msg "$NAME not running"
            exit 1
        fi
   ;;
  *)
   N=/etc/init.d/$NAME
   log_failure_msg "Usage: $N {start|stop|restart|force-reload}"
   exit 1
   ;;
esac
JMarc
 
Messages: 7
Inscription: Dim 27 Nov 2016, 14:15
Distribution: Debian

Re: Exécuter un script avant d'arrêter Debian 9

Messagede juice » Dim 10 Déc 2017, 12:33

Je mettrai le 0 sur # Default-Stop: et tu auras un script en K… et plus en S ce qui serait plus cohérent.
Ensuite assure toi que le # Provides: corresponde au nom de ton script. En l’occurence backupZ et non backup.

Si ça coince encore on pourrait envisager un repli sur systemd puisque la Debian 9 le supporte.
juice
 
Messages: 189
Inscription: Dim 29 Juin 2008, 10:06
Localisation: Oberentzen
Distribution: Archlinux
Niveau: à bulle ?


Retourner vers Un problème ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron