Попробуйте найти идентификатор процесса (pid) оболочки, вы можете использовать ps -ef | grep <script_name>
. Давайте установим этот pid в переменной оболочки $PID
. Найти все дочерние процессы этого $PID
по:
ps --ppid $PID
Вы могли бы найти один или более (если, например, он застрял в конвейерной серии команд). Повторите эту команду пару раз. Если это не изменится, это означает, что скрипт застрял в определенной команде. В этом случае, вы можете прикрепить команду трассировки запущенного дочернего процесса:
sudo strace -p $PID
Это покажет вам, что выполняется, либо бесконечный цикл (например, чтение из трубы) или ожидание какого-либо события, которое никогда не бывает.
В случае, если вы найдете ps --ppid $PID
изменений, это означает, что ваш скрипт продвигается, но он застрял где-то, например. локальный цикл в скрипте. Из изменяющихся команд он может дать вам подсказку, где в скрипте он зацикливается.
Ответ на этот вопрос: [Bash scripting, проверка ошибок, протоколирование] (http://stackoverflow.com/questions/2362255/bash-scripting-checking-for-errors-logging) Вы можете использовать "> > ", чтобы вставлять команды, которые вносят записи в файл error_log. –
Обычный способ отладки сценария оболочки - добавить 'set -x' в начало, но для этого потребуется перезапустить его. Единственное предложение, о котором я могу думать, это использовать «strace», но я не знаю, как легко будет преобразовать его вывод в строки сценария. – Barmar
@FranzHolzinger Как он сделает это без перезапуска скрипта? – Barmar