Сценарий, выполняемый с помощью logrotate, дает другой результат, чем при выполнении его вручную

init(Независимо от того, используете ли вы классический стиль SVR4 init, systemd, runit или что-то еще ), кодируется как конечный -автомат. Он делает что-то только в ответ на события, которые заставляют его изменять состояния. Переход от включенной системы к выключенной — это изменение текущего состояния в состояние, определяемое уровнем выполнения 0, а отключение при перезагрузке — то же самое, только переход в состояние, определяемое уровнем выполнения 6 (. ] и на самом деле оба перехода практически идентичны, за исключением одного последнего обращения к ядру с помощьюinit).

Чтобы ответить на ваш второй вопрос, система функционально находится «на уровне запуска 6» в течение периода времени с момента, когда initобращается к ядру для перезагрузки (, которая не возвращает ), пока ядро ​​​​не прекратит выполнение. на `init во время следующей загрузки.

1
10.03.2020, 04:31
1 ответ

Оказывается, 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.

0
28.04.2021, 23:21

Теги

Похожие вопросы