Я запускаю Ubuntu 11.10 на виртуальной машине (VirtualBox), чтобы узнать больше о разработке в Linux. Я использую git-репозиторий, чтобы сохранить свою работу, и написал сценарий, чтобы связать мою работу и сохранить ее в общей папке для использования, пока виртуальная машина не работает.
Я хотел бы автоматически запустить этот скрипт перед выключением, чтобы моя работа всегда была доступна, если виртуальный компьютер выключен (в настоящее время я должен запустить скрипт вручную).
Я не знаю, является ли выскочка лучшим способом для достижения этой цели, но это конфигурация, которую я написал в качестве теста:
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
В результате выполняется только одно касание (первое касание перед запуском). Что мне нужно изменить, чтобы увидеть один из прикосновений после сна на работу? Или есть более простой способ добиться этого?
Заранее спасибо.
test.conf
- это просто случайное имя файла. Вы могли бы так же легко использоватьwhatEverYouWant.conf
. Ваш комментарий также показывает, что вы не читали «Поваренную книгу», упомянутую в ответе. Если вы посмотрите в раздел 4.2, файл конфигурации задания объясняется более подробно.Я думаю, что это невозможно сделать с помощью upstart , так как скрипт /etc/init.d/sendsigs , который вызывается upstart при остановке / перезапуске, убивает все процессы (
killall5 -9
) в течение 10 секунд, и даже если это не удается, он идет для размонтирования всего и выключения.Лучший способ - использовать ржавые скрипты в стиле /etc/init.d .
Пример: /etc/init.d/shutdown_job
Затем активируйте скрипт
Это поместит сценарий перед сценарием sendigs на уровне выполнения 0 a 6 (завершение работы, перезагрузка). Этот пример сценария записывает дату, затем спит в течение 20 секунд, а затем снова записывает дату в /root/s.log .)
Больше информации:
man update-rc.d
источник
touch /media/sf_LinuxEducation/start
иtouch /media/sf_LinuxEducation/start-long
рядом с датой команды. Даты записываются, но штрихи не трогаются. Это заставляет меня задуматься, размонтирован ли этот диск во время запуска скрипта. Я думаю, что это может иметь какое-то отношение к аргументу NN, хотя я не совсем уверен, как этот аргумент работает (страница руководства объясняет это очень изумительным образом). Как вы узнаете, какое число (или пара чисел) должно быть установлено в этом аргументе?/etc/rc6.d
каталога. Таким образом, сценарий завершения работы 19 должен быть выполнен до того, как будет выполнена любая размонтировка (> 31). Но почему бы не попробовать свою гипотезу и не взяться за файл/root
?/etc/rc6.d
директории показывает, что общие папки монтируются / размонтируются с помощьюK70vboxadd
скрипта. Приведет ли изменение аргумента NN (для моего сценария) к 71, чтобы мой сценарий запускался до размонтирования общих папок VB? Я попробую это позже сегодня.touch /root/start
передsleep 20
командой, и файл не создан. Я даже не знаю, с чего начать, чтобы выяснить, почему. Даты успешно добавляются в/root/s.log
файл, почему я не могу коснуться файла?