Скрипт выполняется иначе, если выполняется из udev

У меня проблема со сценарием, который кажется действительно странным; он, кажется, прекращает выполнение преждевременно при запуске из udev, но не тогда, когда я запускаю его вручную из командной строки. Я попытался устранить его с помощью set -x и когда я запустил его из командной строки, все будет выполнено, как и ожидалось. Однако, когда он запускается из udev, он останавливается преждевременно после определенного момента.

Я думаю, что часть проблемы заключается в том, что отладку скрипта сложно выполнить, когда он запускается udev. Я пробовал вставлять записи в logger , но они в основном просто говорят мне одно и то же (он останавливается преждевременно).

Вы видите что-нибудь, что всплывает, что вызовет эту проблему?


Сценарий можно найти здесь . Одна заметка о них, они предназначены для встроенной системы. При запуске вручную из командной строки выполняется команда:

 ./product.sh -b update /dev/sda1 

Правило udev, которое запускает скрипт:

 ACTION=="add", KERNEL=="sd?1", RUN+="/usr/sbin/product.sh -b update /dev/%k" 

Сценарий останавливается на строках 195 или 197 в product.sh . Я заметил, что если я прокомментирую строки 22 и 28 в product-manifest.sh все будет работать, как ожидалось, при запуске udev и вручную в командной строке.

Хорошо, я думаю, что понял эту проблему. Я думаю, что проблема связана с линией 157, где я перенаправляю вывод в файл; этот файл является подключенным USB-накопителем. Я предполагаю, что перенаправление выполняется одновременно, и когда product-manifest.sh завершен, сценарий продолжается, что в конечном итоге приводит к umounting USB-накопителю до завершения параллельной записи на USB-накопитель. И когда umount происходит одновременно, возникает некоторая ошибка, которая заканчивается преждевременным завершением сценария.

Исправить было перенаправление вывода на SD-карту, а затем мы cp чтобы скопировать его на USB-накопитель:

 product-manifest.sh > "/tmp/MANIFEST" cp "/tmp/MANIFEST" "$1" 

Спасибо @mikeserv за то, что указали мне в правильном направлении.