Я пытаюсь заставить Mac OS X сохранить все виртуальные машины VirtualBox при перезагрузке. У меня уже есть скрипт, который делает это, но мне нужна OS X для автоматического запуска этого скрипта перед перезагрузкой.
Когда Mac OS X перезагружается, он запускает / sbin / reboot?
Или как еще этого достичь?
/etc/rc.shutdown.local
чтобы запустить его при выключении. Похоже, это то, что вы ищете.Ответы:
Хотя Apple рекомендует использовать « launchd », проще всего создать сценарий оболочки, используя, например, пико Terminal:
Файл может содержать что-то вроде:
Затем дайте права на исполнение:
Наконец, подключите скрипт к процедуре выхода из системы:
Если вы запустите другое приложение, поскольку я не проверял это, я думаю, что было бы полезно предупредить себя и вас, что:
Нам может потребоваться отключить сигнал выключения, чтобы выполнить то, что мы хотим;
Затем отправьте новый (будьте осторожны, чтобы не убить сигнал, отправленный нашим собственным
сценарием)…
Если вы хотите удалить крючок:
Если использовать « launchd », идея заключается в том, чтобы захватить сигнал SIGTERM. Посмотрите: /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist
источник
Launchd отправляет раннее предупреждение о завершении работы всем сценариям / демонам, которые имеют подпрограмму StopService () . Это дает вашему процессу больше времени для очистки.
Просто используйте launchd, чтобы запустить скрипт и запускать его в фоновом режиме, пока не пора выходить.
После того, как сервисы, получившие раннее предупреждение, закрываются, все процессы получают
SIGTERM
сигнал за несколько секунд до того, какSIGKILL
их удаляют.Вы можете создать скрипт, который спит и перехватывает SIGTERM для запуска вашей команды, когда придет время. Вам нужно будет проверить, достаточно ли на практике времени для выполнения команд. Это позволяет избежать небольшого количества кодирования, но не намного - обычно лучше просто сделать демон из сценария оболочки.
С исторической точки зрения -
/sbin/reboot
и уровни запуска никогда не существовали в Darwin / OS X иrc.shutdown
устарели вместе с остальной частью,rc
котораяlaunchd
является боссом. Возможно, вы сможете использовать rc.shutdown на тигре или более ранних версиях (в настоящее время у меня нет одного из этих изображений, удобного для проверки). Lion определенно удалил все остатки rc.d и init.d.Возможно, вы захотите посмотреть , поможет ли в вашей ситуации лунатик . Я не использовал его в течение долгого времени - но это определенно стремится решить вашу дилемму.
источник