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