У меня есть скрипт, работающий во время загрузки, однако он выдает мне ошибки, которые я вижу в файле журнала. Когда я запускаю его вручную, он работает нормально - вероятно, среда изменилась.
Есть ли способ запустить такой скрипт в условиях, когда он выполняется при загрузке, без перезагрузки?
Скрипт расположен в /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
Проверьте init
man-страницу или другую документацию по вашей системе, чтобы узнать, какие переменные среды она определяет. Многим программам, предназначенным для работы в качестве демонов, понадобится только это PATH
и ничего больше. PATH
Значение выше — это значение по умолчанию для init в Debian.
решение3
Без дополнительной информации о том, что делает ваш скрипт и какие ошибки вы получаете, сложно дать точный ответ. При этом, вероятно,возможныйчтобы воссоздать среду, но это, скорее всего, будет очень сложно, потребуется размонтировать или привязать-монтировать файловые системы или другие подобные забавные вещи.
Альтернативой может быть создание виртуальной машины с использованием чего-то вродеVirtualBoxилиКВМи выполнять отладку с его помощью, что позволяет перезагружать виртуальную машину так часто, как это необходимо, без необходимости перезагружать хост-машину.