Używam Ubuntu 11.10 na maszynie wirtualnej (VirtualBox), aby dowiedzieć się więcej o programowaniu w systemie Linux. Korzystam z repozytorium git, aby zapisać swoją pracę i napisałem skrypt, aby spakować moją pracę i zapisać ją w folderze współdzielonym do użytku, gdy maszyna wirtualna nie jest uruchomiona.
Chciałbym automatycznie uruchomić ten skrypt przed zamknięciem, aby moja praca była zawsze dostępna, jeśli vm jest wyłączony (obecnie muszę ręcznie uruchomić skrypt).
Nie wiem, czy upstart jest najlepszym sposobem na osiągnięcie tego, ale jest to konfiguracja, którą napisałem jako 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
W rezultacie wykonywany jest tylko jeden dotyk (pierwszy dotyk przed uruchomieniem). Co muszę zmienić, aby zobaczyć jeden z akcentów po śnie do pracy? Czy jest łatwiejszy sposób na osiągnięcie tego?
Z góry dziękuję.
test.conf
to po prostu losowa nazwa pliku. Możesz równie łatwo użyćwhatEverYouWant.conf
. Twój komentarz pokazuje również, że nie przeczytałeś „Książki kucharskiej” wspomnianej w odpowiedzi. Jeśli zajrzysz do sekcji 4.2, plik konfiguracji zadania jest dokładniej wyjaśniony.Myślę, że nie można tego zrobić za pomocą upstart , ponieważ skrypt /etc/init.d/sendsigs , który jest wywoływany przez upstart podczas zatrzymywania / restartowania, zabija wszystkie procesy (
killall5 -9
) w ciągu 10 sekund, a nawet jeśli to się nie powiedzie, idzie za odmontowanie wszystkiego i wyłączenie.Najlepszym sposobem byłoby użycie zardzewiałych skryptów w stylu /etc/init.d .
Przykład: /etc/init.d/shutdown_job
Następnie aktywuj skrypt
Spowoduje to umieszczenie skryptu przed skryptem sendigs na poziomach 0 i 6 (zamknięcie, ponowne uruchomienie). Ten przykładowy skrypt rejestruje datę, następnie śpi przez 20 sekund, a następnie ponownie rejestruje datę w /root/s.log .)
Więcej informacji:
man update-rc.d
źródło
touch /media/sf_LinuxEducation/start
itouch /media/sf_LinuxEducation/start-long
obok poleceń daty. Daty są rejestrowane, ale zmiany nie są zmieniane. To sprawia, że zastanawiam się, czy ten dysk nie jest odmontowany podczas uruchamiania skryptu. Myślę, że może to mieć coś wspólnego z argumentem NN, chociaż nie jestem pewien, jak naprawdę działa ten argument (strona podręcznika wyjaśnia to w bardzo zgięty sposób). Skąd wiesz, jaką liczbę (lub parę liczb) należy ustawić w tym argumencie?/etc/rc6.d
katalogów. Tak więc skrypt zamknięcia 19 powinien był zostać wykonany przed wykonaniem odmontowania (> 31). Ale dlaczego nie wypróbować swojej hipotezy i/root
zamiast tego dotknąć pliku ?/etc/rc6.d
pokazuje, że foldery współdzielone są montowane / odmontowywane za pomocąK70vboxadd
skryptu. Czy zmiana argumentu NN (dla mojego skryptu) na 71 sprawi, że mój skrypt będzie działał przed odmontowaniem folderów współdzielonych VB? Spróbuję dzisiaj później.touch /root/start
przedsleep 20
poleceniem i żaden plik nie został utworzony. Nie wiem nawet, od czego zacząć, aby dowiedzieć się, dlaczego. Daty są szczęśliwie dodawane do/root/s.log
pliku, dlaczego nie mogę go dotknąć?