Launchd надсилає раннє попередження про відключення для всіх сценаріїв / демонів, які мають підпрограму StopService () . Це дає вашому процесу найбільше часу на очищення.
Просто запускайте скрипт і запускайте його у фоновому режимі, поки не настане час виходу.
Після того, як служби, які отримали раннє попередження, закриваються, всі процеси отримують SIGTERMсигнал за кілька секунд до їх SIGKILLядерної передачі .
Ви можете зробити сценарій, який спить і захоплює SIGTERM для запуску вашої команди, коли настане цей час. Вам доведеться побачити, чи дозволяє це достатньо часу на практиці для виконання команд. Це дозволяє уникнути небагато кодування, але не багато - як правило, краще просто зробити демона зі скрипту оболонки.
З історичної точки зору - /sbin/rebootі рівні Darll / OS X ніколи не існували, і rc.shutdownвони застаріли разом з рештою rcтепер, яка launchdє босом. Можливо, ви зможете скористатися rc.shutdown на тигра чи раніше (у мене немає жодного з цих зображень, зручних для перевірки на даний момент) Лев, безумовно, видалив усі залишки rc.d та init.d.
Ви можете дізнатися, чи допоможе сонник у вашому випадку. Я не використовував його досить давно - але це, безумовно, спрямоване на вирішення вашої дилеми.