Скрипт выполняется иначе, если выполняется из 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 и вручную в командной строке.

One Solution collect form web for “Скрипт выполняется иначе, если выполняется из udev”

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

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

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

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

  • Как проверить, какой пользователь подключить устройство
  • systemd - устройство umount после службы, которое зависит от его завершения
  • Что это означает, когда что-то говорит о том, что файлы устройств UNIX являются статическими?
  • Запуск backintime на диске
  • UDEV-Rule для установки скрипта USB-Stick / execute
  • В чем разница между udev и acpi (d)
  • Измените значение «max_sectors» USB для всего семейства устройств
  • /etc/udev/rules.d/ vs /lib/udev/rules.d/ - что использовать и почему?
  • udevd ест слишком много циклов процессора
  • Как создать правило udev для подключения только USB-накопителя?
  • Запустите сценарий, который отображает окно X из правила udev
  • Interesting Posts

    "/ Usr / lib / passmgmt: Файл паролей занят. Повторите попытку позже "в Solaris 11

    Использование команды sed в Unix

    Что означает тире «-» в командной строке Unix?

    Что на самом деле происходит, когда контрольная сумма выходит из строя для файла с использованием btrfs?

    Как ssh на нескольких ipaddress и получить вывод и ошибку на локальной машине * nix?

    Может ли сценарий быть исполняемым, но не читаемым?

    Измельчение всего: файлы / папки и соответствующие имена файлов

    Список каталогов и понимание ls

    Использование и понимание системных параметров, связанных с планированием, в контексте рабочего стола

    Трубная цепь с устройствами

    TCP *: hbci (LISTEN) – Что означает hbci?

    Невозможно установить драйверы Nvidia в Kali Linux (информация о версии не требуется в /lib/x86_64-linux-gnu/libgcrypt.so.20)

    Тестирование диапазона DHCP; несколько адресов на интерфейс

    Bash Script – Wget Graphical Download Progress

    wget – Как загрузить рекурсивно и только определенные типы / расширения mime (т. е. только текст)

    Linux и Unix - лучшая ОС в мире.