init
(Независимо от того, используете ли вы классический стиль SVR4 init
, systemd, runit или что-то еще ), кодируется как конечный -автомат. Он делает что-то только в ответ на события, которые заставляют его изменять состояния. Переход от включенной системы к выключенной — это изменение текущего состояния в состояние, определяемое уровнем выполнения 0, а отключение при перезагрузке — то же самое, только переход в состояние, определяемое уровнем выполнения 6 (. ] и на самом деле оба перехода практически идентичны, за исключением одного последнего обращения к ядру с помощьюinit
).
Чтобы ответить на ваш второй вопрос, система функционально находится «на уровне запуска 6» в течение периода времени с момента, когда init
обращается к ядру для перезагрузки (, которая не возвращает ), пока ядро не прекратит выполнение. на `init во время следующей загрузки.
Оказывается, logrotate выполняет скрипт, используя sh
, а мой скрипт содержит bashishms.
Со страницы руководства:
lastaction/endscript
The lines between lastaction and endscript (both of which must appear on lines by themselves) are executed (using /bin/sh)...
В конце концов, я запускаю свой скрипт через crontab
через несколько минут после logrotate.