У меня есть машина под управлением пары бродячих ВМ. У меня проблема в том, что иногда я забываю отключить эти виртуальные машины перед тем, как выключить или перезагрузить компьютер. Из-за этого моя машина застряла с этим сообщением:waiting for vboxnet0 to become free
Я искал решения и нашел эту страницу:
http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
Я пытался, что они для выключения, но это не работает.
Я написал файл sh для этой команды:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
какие-либо предложения?
shutdown
reboot
execute-command
SERPRO
источник
источник
Ответы:
Если ваши бродячие виртуальные машины используют VirtualBox, вы можете изменить / etc / default / virtualbox и изменить строку, которая гласит:
SHUTDOWN_USERS=""
в
SHUTDOWN_USERS="all"
Это исправило это для меня на Ubuntu 14.04
источник
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
вместоSHUTDOWN_USERS="all"
/etc/default/virtualbox
файла ...Чтобы выполнить скрипт при выключении или перезагрузке:
sudo chmod +x K99_script
Примечания:
источник
источник
Как это сделать с помощью Systemd (это проще)
Теперь, когда варианты Ubuntu и Mint перешли на systemd, я обнаружил, что мои старые решения, основанные на вышеизложенном, были менее удовлетворительными. Я искал в Интернете, чтобы выяснить, как это сделать с помощью systemd, и в итоге объединил чужую мудрость и задокументировал ее как пост в блоге на blogspot.com.au, содержащий следующее руководство.
С помощью systemd вы создаете один или два файла для вызова ваших сценариев, используя приведенные ниже шаблоны, и выполняете пару команд. Просто.
Версия GUI
Сначала создайте сценарии, которые вы хотите запустить при запуске и / или завершении работы. Просто сделайте один, если вам не нужны оба. Я создал .scopening_atstart и .scfullcopy_atend.
Затем убедитесь, что они оба исполняемые, щелкнув правой кнопкой мыши по файлу, выбрав свойства и убедившись, что в соответствии с разрешениями вы отметили Разрешить выполнение файла как программы.
Два файла, которые я создал, заполняют и сохраняют содержимое виртуального диска. Они также создают файл в моем домашнем каталоге, чтобы доказать, что служба работает. Они были в форме:
Затем я открыл свой файловый менеджер как root, открыл
/etc/systemd/system
и создал файл startup.service и файл save-ramdisk.service. Очевидно, что вы можете выбрать свои собственные имена, и общие имена могли включать файл запуска с именем johns_start.service и файл завершения работы с именем johns_shutdown.service. Просто не выбирайте названия существующих сервисов.и
Вы можете использовать те же служебные файлы, заменяя мой полный путь к исполняемому скрипту.
Наконец, для каждого из них выполните команду systemctl enable your_files_name (но без службы суффиксов). Так что мой первый был
systemctl enable startup
Перезагрузите компьютер один раз, чтобы запустить службы. Служба запуска будет выполняться всякий раз, когда systemd входит в многопользовательскую цель, и службу остановки, когда она выходит из многопользовательской цели. Альтернативные сервисные файлы с различными условиями активации будут описаны ниже.
Дополнительные полезные команды включают в себя:
systemctl активирован при запуске
systemctl активен при запуске
systemctl перезапустить запуск
Больше можно найти по ссылке выше.
CLI (командная строка) версия
В этом описании предполагается, что вы работаете из своего домашнего каталога, а не / home / john, используете sudo по мере необходимости и ваш выбор редактора, где я пишу vim или svim.
Создайте сценарии оболочки запуска и завершения работы с первой строкой
#!/bin/sh
и сделайте их исполняемыми с помощьюchmod +x my_new_filename
.Создайте два файла, как указано выше, или в этом примере один файл для обработки задач запуска и завершения работы. Я буду выполнять скрипты в своем домашнем каталоге, но @don_crissti показывает некоторые альтернативы в Stack Exchange .
и скопируйте в файл содержимое:
Затем включите службу с помощью команды:
и перезагрузите систему, после чего службы будут активны. Команды
systemctl is-enabled start_and_stop
иsystemctl is-active start_and_stop
могут быть использованы в мониторинге ваших новых сервисов.Изменение условий запуска для выключения
Прежде всего файлы используют открытие или закрытие многопользовательской среды для запуска сценариев. Файл ниже использует начало четырех возможных процессов выключения для запуска своих сценариев. Добавление или удаление целей в строке «До» + в строке «WantedBy» позволит вам сделать более четкие различия:
Этот файл был предложен во втором ответе этого поста, но я не смог его запустить, пока не добавил раздел «Установка».
Снова отредактируйте скрипт
/etc/systemd/service/
и включите его, используяsystemctl enable your_file_name
. Когда я изменил цели, я использовалsystemclt disable file_name
команду, а затем снова включил ее, что символически связало ее с целевыми каталогами. Перезагрузитесь и сервис будет работать.источник
Создайте исполняемый файл оболочки с вашим скриптом в каталоге /etc/init.d/.
Так как это должно выполняться во время выключения или перезагрузки, необходимо создать программные ссылки в /etc/rc0.d/ и /etc/rc6.d
Пример:
источник
chmod
изменяет флаги разрешения цели ссылки, которая одинакова для обоих аргументов. Указание их обоих является излишним.Вы можете найти решение здесь: Приостановить / возобновить работу всех ящиков Vagrant при выключении / запуске системы .
Существует простой скрипт инициализации, который приостанавливает все запущенные блоки перед выключением.
Установка
Отредактируйте
/etc/init.d/vagrant-boxes
и вставьте скрипт из вышеприведенной статьи и сохраните. Или загрузите его отсюда и сохраните в/etc/init.d/vagrant-boxes
. На Debian / Ubuntu и т. Д., Запуститеисточник
Для Ubuntu 14.10 вы что-то вроде
RC04
неRC99
Что делать с нуля
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Шаги, которые я прошел
источник