не удалось запустить команду в файле bash при запуске

399
combo_ci

У меня есть виртуальная машина в EXSI6,5 и установить на нее Ubuntu. Я пишу Bash-файл для запуска команды при запуске, как показано ниже:

#!/bin/bash  # Bash script to dvblast  sleep 10  gnome-terminal --title="foo" -x bash -c \ "printf '\e[8;13;90t'&&dvblast -a 3 -f 12596000 -s 27500000 -v 13 -c Tuner4.cfg -i 1; read line" & 

Его запуск DVBLast запускается с первых 10 секунд сна. Этот файл bash работает нормально.

Но когда я экспортирую ovf templateиз этой виртуальной машины и снова развертываю Esxiи запускаю vm, файл bash не запускается из-за отказа в разрешении . это изображение выходного окна:

output

Когда я запускаю команду с straceувидеть этот журнал:

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 DVBlast 2.2 (release) warning: restarting open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3 open("/usr/lib/x86_64-linux-gnu/gconv/ISO8859-1.so", O_RDONLY|O_CLOEXEC) = 3 debug: using linux-dvb API version 5 open("/dev/dvb/adapter3/frontend0", O_RDWR|O_NONBLOCK) = -1 ENOENT (No such file or directory) error: opening device /dev/dvb/adapter3/frontend0 failed (No such file or directory) +++ exited with 1 +++ 

Если я запускаю терминал и запускаю, sudo -sа затем запускаю bash-файл, то он работает нормально.

Кто-нибудь знает, как я решаю эту проблему? заранее спасибо

1
Возможно, это плохая идея из-за проблем с безопасностью, но как насчет отключения приглашения пароля команды sudo с помощью NOPASSWD в / etc / sudoers и последующего добавления sudo перед командой dvblast в вашем скрипте? ArtiZirk 7 лет назад 0
я делаю это для файлов bash и bash, запускаемых без запроса пароля, но все еще есть проблема, как это сделать для dvblast? combo_ci 7 лет назад 0
Вы запускаете ваш скрипт как `root` (используя` sudo`), после чего ваш скрипт работает, когда вы запускаете его и с пользователем без полномочий root? Какое оборудование вы используете? Можете ли вы предоставить вывод `lsmod` для до (сценарий не работает) и после (сценарий работает)? sebasth 7 лет назад 0
Похоже, что устройство еще не готово к моменту запуска скрипта. simlev 7 лет назад 0

1 ответ на вопрос

1
bocian85

Как указал Симлев, ошибка на самом деле связана с проблемой доступа к устройству DVB. При экспорте OVF и повторном импорте на другом хосте в конфигурации виртуальной машины может отсутствовать DVB-тюнер или он может просто не существовать на другом компьютере. Проверьте конфигурацию скопированной виртуальной машины и убедитесь, что устройство DVB пропущено точно так же, как в исходной виртуальной машине.

Затем войдите в клонированную виртуальную машину и убедитесь, что правила udev не зарезервировали имя устройства DVB от первого esxi, или тюнер на новой виртуальной машине имеет другой адрес устройства, такой как /dev/dvb/adapter4/frontend0вместо /dev/dvb/adapter3/frontend0, или, возможно, необходимо изменить внешний интерфейс (например, не тот же INPUT на тюнере, или другое оборудование / модель оборудования)

Я полагаю, что это проблема адреса устройства, а не всего, что связано с самим BASH.

когда я хочу экспортировать OVF, я должен отсоединить корзину dvb, потому что это устройство PCI ... затем добавить корзину DVB при развертывании на хост, тогда он не должен ссылаться на EXIST карту на виртуальной машине или нет combo_ci 7 лет назад 0
по поводу адресации устройства, которое я тестирую с адаптером 3, и все еще имею эту проблему ... я запутался в этой проблеме combo_ci 7 лет назад 0
Udev.rules резервирует имена, такие как eth0 и т. Д., Используя, например, адреса PCI / MAC-адреса, поэтому даже удаление устройства не приведет к удалению привязки. Этот механизм гарантирует, что после повторного подключения устройства оно получит то же обозначение, что и раньше. Если бы я был вами, я бы вошел в новую виртуальную машину и выполнил ls -la / dev / dvb / * и проверил, что там появляется, а затем попытался вручную запустить dvblast. Я полагаю, что проблема происходит из-за устройства PCI, имеющего другое обозначение в Linux. bocian85 7 лет назад 1
Вы имеете в виду, что если я снова установлю Ubuntu, команда может работать правильно? combo_ci 7 лет назад 0
Нет, когда вы запускаете клонированную виртуальную машину, вы можете войти в нее, верно? просто выполните `ls -la / dev / dvb / *` и опубликуйте результаты. Вы также можете вставить результат команды `lspci` bocian85 7 лет назад 0

Похожие вопросы