J'utilise 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 j'ai écrit un script pour regrouper mon travail et l'enregistrer dans le dossier partagé pour l'utiliser pendant que la machine virtuelle n'est pas en cours d'exécution.
Je voudrais exécuter automatiquement ce script avant l'arrêt afin que mon travail soit toujours disponible si le VM est éteint (actuellement je dois exécuter manuellement le script).
Je ne sais pas si upstart 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 dans le pré-démarrage). Que dois-je changer pour voir une des touches après le sommeil travailler? Ou existe-t-il un moyen plus simple de réaliser cela?
Merci d'avance.
test.conf
est juste un nom de fichier aléatoire. Vous pouvez tout aussi bien l'utiliserwhatEverYouWant.conf
. Votre commentaire montre également que vous n'avez pas lu le "Cookbook" mentionné dans la réponse. Si vous regardez dans la section 4.2, le fichier de configuration du travail est expliqué plus en détail.Je pense que cela ne peut pas être fait via upstart , car le script /etc/init.d/sendsigs , qui est invoqué par upstart lors de l'arrêt / redémarrage, tue tous les processus (
killall5 -9
) dans les 10 secondes, et même si cela ne réussit pas, il va pour tout démonter et arrêter.La meilleure façon serait d'utiliser les scripts de style /etc/init.d rouillés .
Exemple: /etc/init.d/shutdown_job
Activez ensuite le script
Cela placera le script avant le script sentins 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 dans /root/s.log .)
Plus d'informations:
man update-rc.d
la source
touch /media/sf_LinuxEducation/start
ettouch /media/sf_LinuxEducation/start-long
juste à côté des commandes de date. Les dates sont enregistrées, mais les touches ne sont pas touchées. Cela me fait me demander si ce lecteur n'est pas monté au moment de l'exécution du script. Je pense que cela peut avoir quelque chose à voir avec l'argument NN, bien que je ne sais pas vraiment comment cet argument fonctionne (la page de manuel l'explique d'une manière très hallucinante). Comment savez-vous quel nombre (ou paire de nombres) doit être défini dans cet argument?/etc/rc6.d
répertoire. Ainsi, le script d'arrêt 19 aurait dû être exécuté avant tout démontage (> 31). Mais pourquoi ne pas essayer votre hypothèse et toucher un fichier à la/root
place?/etc/rc6.d
répertoire révèle que les dossiers partagés sont montés / démontés avec leK70vboxadd
script. Est-ce que changer l'argument NN (pour mon script) en 71 ferait exécuter mon script avant le démontage des dossiers partagés VB? Je vais l'essayer plus tard dans la journée.touch /root/start
avant lasleep 20
commande et aucun fichier n'est créé. Je ne sais même pas par où commencer pour savoir pourquoi. Les dates sont heureusement ajoutées au/root/s.log
fichier pourquoi ne puis-je pas toucher un fichier?