Как запустить скрипт так, как будто он запускается при загрузке?

Как запустить скрипт так, как будто он запускается при загрузке?

У меня есть скрипт, работающий во время загрузки, однако он выдает мне ошибки, которые я вижу в файле журнала. Когда я запускаю его вручную, он работает нормально - вероятно, среда изменилась.

Есть ли способ запустить такой скрипт в условиях, когда он выполняется при загрузке, без перезагрузки?

Скрипт расположен в /etc/init.dс символической ссылкой в /etc/rc5.d/S97mounter.sh​​.

решение1

Вы можете запустить как root

env - scriptname

Это очистит вашу среду перед запуском скрипта, однако также сохранит ваш shell. Чтобы очистить среду и установить оболочку в sh, выполните следующие действия:

env -i /bin/sh -c scriptname

Затем это запустит скрипт с помощью /bin/sh. Однако это не полностью имитирует среду загрузки, поскольку не учитывает другие службы, которые могут быть не запущены в данный момент.

Я нашел похожий вопрос по моделированию среды crontab, и есть очень полезное решение, опубликованноеммккоо.

Используя это, вы можете запустить это в скрипте и перезагрузить хост, а затем использовать файл среды для загрузки вашей среды:

часть загрузочного скрипта:

env > /var/tmp/bootenv

Затем в обычном режиме выполнения, чтобы установить ту же самую среду загрузки, выполните следующее:

env - `cat /var/tmp/bootenv` /bin/sh -c scriptname

решение2

Некоторые вещи могут отличаться, когда программа запускается через сеанс пользователя, а не через скрипт запуска:

  • Программа наследует множество переменных среды (включая PATH, HOME, …).
  • Программа наследует несколько файловых дескрипторов, включая терминал.
  • Лимиты могут быть разными.

Чтобы запустить программу с минимальной средой и закрыть стандартные дескрипторы файлов, можно использовать что-то вроде

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null

Проверьте initman-страницу или другую документацию по вашей системе, чтобы узнать, какие переменные среды она определяет. Многим программам, предназначенным для работы в качестве демонов, понадобится только это PATHи ничего больше. PATHЗначение выше — это значение по умолчанию для init в Debian.

решение3

Без дополнительной информации о том, что делает ваш скрипт и какие ошибки вы получаете, сложно дать точный ответ. При этом, вероятно,возможныйчтобы воссоздать среду, но это, скорее всего, будет очень сложно, потребуется размонтировать или привязать-монтировать файловые системы или другие подобные забавные вещи.

Альтернативой может быть создание виртуальной машины с использованием чего-то вродеVirtualBoxилиКВМи выполнять отладку с его помощью, что позволяет перезагружать виртуальную машину так часто, как это необходимо, без необходимости перезагружать хост-машину.

Связанный контент