faild, um einen Befehl in der bash-Datei beim Start auszuführen

431
combo_ci

Ich habe eine virtuelle Maschine in EXSI6.5 und installiere Ubuntu darauf. Ich schreibe eine bash-Datei, um einen Befehl wie folgt auszuführen:

#!/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" & 

Es läuft DVBLast im Start mit ersten 10 Sekunden Schlaf. Diese Bash-Datei funktioniert einwandfrei.

Aber wenn ich Export ovf templatevon dieser VM und bereitstellen wieder Esxiund starten vm habe die Bash - Datei ausführen verweigert Genehmigung . Dies ist das Ausgabefensterbild:

output

Wenn ich den Befehl mit stracediesem Protokoll ausführe :

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 +++ 

Wenn ich Terminal laufen sudo -slasse und dann die Bash-Datei starte, funktioniert das einwandfrei.

Weiß jemand, wie ich dieses Problem löse? Danke im Voraus

1
Wahrscheinlich eine schlechte Idee aus Sicherheitsgründen, aber was ist mit der Deaktivierung der Kennwortabfrage des Befehls sudo mithilfe von NOPASSWD in / etc / sudoers und dem anschließenden Hinzufügen von sudo vor dem Befehl dvblast in Ihrem Skript? ArtiZirk vor 6 Jahren 0
ich mache das für bash-datei und bash-datei, die ohne passwortanforderung laufen, aber immer noch probleme haben, wie das für dvblast zu tun? combo_ci vor 6 Jahren 0
Führen Sie Ihr Skript als "root" (mit "sudo") aus. Danach funktioniert Ihr Skript, wenn Sie es auch mit einem Benutzer ohne Rootberechtigung ausführen. Welche Hardware benutzt du? Können Sie die Ausgabe von 'lsmod' für vor (Skriptfehler) und nachher (Skriptfunktion) bereitstellen? sebasth vor 6 Jahren 0
Es sieht so aus, als sei das Gerät noch nicht bereit, wenn das Skript ausgeführt wird. simlev vor 6 Jahren 0

1 Antwort auf die Frage

1
bocian85

Wie simlev darauf hingewiesen hat, handelt es sich bei dem Fehler tatsächlich um das Problem, das das DVB-Gerät erreicht. Beim Exportieren der OVF-Datei und beim erneuten Importieren auf einem anderen Host wurde bei der Konfiguration der VM möglicherweise der DVB-Tuner weggelassen oder auf dem anderen Computer einfach nicht vorhanden. Überprüfen Sie die Konfiguration der kopierten virtuellen Maschine und stellen Sie sicher, dass das DVB-Gerät genau wie in der virtuellen Quellmaschine durchlaufen wird.

Dann melden Sie sich an den geklonten VM in und überprüfen, ob die udev - Regeln nicht den Namen des DVB - Geräts aus dem ersten esxi reservieren, oder der Tuner auf die neue VM hat eine andere Geräteadresse wie /dev/dvb/adapter4/frontend0statt /dev/dvb/adapter3/frontend0, oder vielleicht das Frontend muss geändert werden (z. B. nicht derselbe INPUT am Tuner oder ein anderes Hardwaremodell)

Ich glaube, es ist das Problem bei der Adressierung des Geräts und nicht in Bezug auf BASH.

Wenn ich OVF exportieren will, muss ich den dvb-Wagen deattached, da dies ein PCI-Gerät ist. Dann fügen Sie den DVB-Wagen hinzu, wenn er auf dem Host bereitgestellt wird. Dann sollte er sich nicht auf die Karte "Exist" der Karte auf vm beziehen oder nicht combo_ci vor 6 Jahren 0
über die Adressierung des Geräts teste ich mit Adapter 3 und habe immer noch dieses Problem ... Ich habe dieses Problem verwirrt: / combo_ci vor 6 Jahren 0
Udev.rules behält Namen wie eth0 usw. bei, die beispielsweise PCI-Adressen / MAC-Adressen verwenden. Wenn Sie also das Gerät entfernen, wird die Bindung nicht entfernt. Dieser Mechanismus stellt sicher, dass das Gerät nach dem erneuten Anbringen die gleiche Bezeichnung erhält wie zuvor. Wenn ich Sie wäre, würde ich mich in die neue VM einloggen und ls -la / dev / dvb / * ausführen und überprüfen, was dort angezeigt wird. Versuchen Sie dann manuell, die dvblast auszuführen. Ich glaube, dass das Problem von PCI-Geräten mit unterschiedlicher Bezeichnung in Linux herrührt. bocian85 vor 6 Jahren 1
Sie meinen, wenn ich Ubuntu erneut installiere, könnte der Befehl korrekt funktionieren? combo_ci vor 6 Jahren 0
Nein, wenn Sie die geklonte VM ausführen, können Sie sich dort anmelden, oder? Machen Sie einfach das `ls -la / dev / dvb / *` und veröffentlichen Sie die Ergebnisse. Sie können auch das Ergebnis des `lspci'-Befehls einfügen bocian85 vor 6 Jahren 0