У меня есть этот сценарий в /etc/init.d
что я хочу знать, запустится ли он при перезагрузке системы. Есть ли способ «смоделировать» условия перезагрузки, чтобы увидеть, действительно ли будет запущен сценарий (и отладить его), без необходимости перезагрузки системы?
Обратите внимание, что я знаю, что вы можете просто запустить сценарий для его отладки. Моя цель - устранить те случаи, когда сценарий работает нормально при запуске вручную, но по какой-то причине он не запускается при запуске / перезагрузке системы (например, какое-то условие запуска с другим сценарием, вещи с разрешениями и т. Д.).
Может, это связано с уровнями выполнения? Как я не который знаком с ними.
Спасибо!
Хотя это может быть уродливым способом отладки, на самом деле вы можете попытаться включить свою службу на неиспользуемом уровне выполнения, чтобы проверить, как ведет себя скрипт при запуске из init.
Например. обычно уровень запуска 4 не используется (хотя проверьте в своей системе). Затем вы можете скопировать каталог символических ссылок rc3.d в rc4.d (чтобы убедиться, что на уровнях 3 и 4 все службы одинаковы) и включить службу для уровня 4. Затем, запустив telinit 4
вы можете эмулировать запуск вашего скрипта. Это заставит init переключить уровень выполнения, что почти аналогично тому, когда он переключается на уровень выполнения перезагрузки перед перезапуском машины.
Обратите внимание, что ответ от @BillThor правильно указывает на ключевые проблемы и может указывать более удобный способ отладки вашего скрипта, чем запускать init каждый раз, поскольку он в любом случае будет выполнять работу по перезапуску ваших служб каждый раз.
Распространенная проблема - различия в окружающей среде. Если в первой строке сценария нет пути взрыва, проблема может быть в различиях в оболочке.
Самая частая проблема, с которой я сталкивался, - это ожидания пути. init.d
сценарии запускаются с сокращенным путем.
Это те же проблемы, что и в скриптах cron. Я считаю, что путь и окружение одинаковы или, по крайней мере, очень похожи. Попробуйте запустить cron
работа с правами root, которая сбрасывает свою среду. Что-то вроде:
echo PATH=$PATH
echo
echo ENVIRONMENT
env
echo
echo Set variables
set
Затем начните /bin/sh
session и очистите его среду, чтобы она соответствовала заданию cron, перед запуском задания init. Вы должны иметь возможность создать сценарий установки и запустить его как /bin/sh
сценарий.