Page 1 sur 1
Exécuter un script avant d'arrêter Debian 9
Publié : mer. 06 déc. 2017, 21:53
par JMarc
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 : Tout sélectionner
#!/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 :
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
Re: Exécuter un script avant d'arrêter Debian 9
Publié : jeu. 07 déc. 2017, 00:37
par juice
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.
Re: Exécuter un script avant d'arrêter Debian 9
Publié : jeu. 07 déc. 2017, 08:25
par JMarc
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.
Re: Exécuter un script avant d'arrêter Debian 9
Publié : ven. 08 déc. 2017, 00:26
par juice
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.
Re: Exécuter un script avant d'arrêter Debian 9
Publié : ven. 08 déc. 2017, 10:49
par JMarc
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 : Tout sélectionner
#! /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
Re: Exécuter un script avant d'arrêter Debian 9
Publié : dim. 10 déc. 2017, 12:33
par juice
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.