J'exécute Ubuntu 11.10 sur une machine virtuelle (VirtualBox) pour en savoir plus sur le développement sous Linux. J'utilise un référentiel git pour enregistrer mon travail et ai écrit un script pour regrouper mon travail et l'enregistrer dans le dossier partagé pour l'utiliser lorsque la machine virtuelle n'est pas en cours d'exécution.
Je souhaite exécuter automatiquement ce script avant l’arrêt afin que mon travail soit toujours disponible si la machine virtuelle est désactivée (pour l’instant, je dois exécuter le script manuellement).
Je ne sais pas si le plus récent est le meilleur moyen d'y parvenir, mais voici la configuration que j'ai écrite comme test:
description "test script to run at shutdown"
start on runlevel [056]
task
script
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
end script
pre-start script
touch /media/sf_LinuxEducation/pre-start
sleep 15
touch /media/sf_LinuxEducation/pre-start-long
end script
post-start script
touch /media/sf_LinuxEducation/post-start
sleep 15
touch /media/sf_LinuxEducation/post-start-long
end script
pre-stop script
touch /media/sf_LinuxEducation/pre-stop
sleep 15
touch /media/sf_LinuxEducation/pre-stop-long
end script
post-stop script
touch /media/sf_LinuxEducation/post-stop
sleep 15
touch /media/sf_LinuxEducation/post-stop-long
end script
Le résultat est qu'une seule touche est accomplie (la première touche en pré-démarrage). Que dois-je changer pour voir l'une des touches après le sommeil au travail? Ou y a-t-il un moyen plus facile d'obtenir ceci accompli?
Merci d'avance.
Le pstart Intro, Cookbook and Best Practices contient un grand nombre d'extraits de code à utiliser pour créer des tâches et des travaux ultérieurs.
La section processus d'arrêt du livre de recettes indique que /etc/init/rc.conf
sera exécuté et appelle /etc/init.d/rc
. À son tour, cela appellera éventuellement /etc/init.d/sendsigs
. Donc, si vous start on starting rc
, votre tâche sera exécutée avant rc (et les sigterms qui feraient normalement fermer le processus).
fichier: /etc/init/test.conf
description "test script to run at shutdown"
start on starting rc
task
exec /etc/init/test.sh
fichier: /etc/init/test.sh
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
Je pense que cela ne peut pas être fait via pstart, comme le script /etc/init.d/sendigs , qui est appelé par pstart lors de l’arrêt/du redémarrage, tue tous les processus (killall5 -9
) dans les 10 secondes, et même si cela ne réussit pas, il permet de tout démonter et de s’arrêter.
Le meilleur moyen serait d'utiliser les scripts de style rouillés /etc/init.d .
Exemple: /etc/init.d/shutdown_job
#! /bin/sh
### BEGIN INIT INFO
# Provides: shutdown_job
# Required-Start:
# Required-Stop: sendsigs
# Default-Start:
# Default-Stop: 0 6
# Short-Description: bla
# Description:
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
do_stop () {
date > /root/s.log
sleep 20
date >> /root/s.log
}
case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
:
Puis activez le script
Sudo update-rc.d shutdown_job start 19 0 6 .
Cela placera le script avant le script Savesigs sur les niveaux d'exécution 0 à 6 (arrêt, redémarrage). Cet exemple de script enregistrera la date, puis dormira pendant 20 secondes, puis enregistrera à nouveau la date sur / root/s.log.)
Plus d'informations: