Jump to content
Sign in to follow this  
Chris200

Fehlermeldung auf dem Red Brick: Could not find file "/etc/localtime"

Recommended Posts

Hallo,

ich habe ein Programm auf C# geschrieben, bei dem unter anderem die Zeit- und Datumsangabe des Red Bricks ausgegeben werden sollte (z.B.: DateTime.Now.Second). Bekomme dabei aber jedesmal, wenn ich es auf dem Red Brick laufen lasse die Fehlermeldung:

"Unhandled Exception:

System.IO.FileNotFoundException: Could not find file "/etc/localtime"

File name: '/etc/localtime'"

 

Beim Debuggen des Programms über Visual Studio funktioniert es hingegen einwandfrei, hierbei wird wahrscheinlich einfach die Computer-Zeitangabe verwendet.

Wäre hierbei sehr dankbar für Hilfe.

Meine zweite Frage wäre, wie ein Befehl aussieht die Red Brick Zeit über einen Programmtext individuell abzuändern. Also beispielsweise irgendein Datum mit beliebeiger Zeit vorzugeben.

Vielen herzlichen Dank.

Share this post


Link to post
Share on other sites

Moin,

das ist vermutlich auf einen Bug im Brick Viewer zurückzuführen, der mit Version 2.4.5 gefixt wurde.

 

/etc/localtime ist ein Symlink auf die gewünschte Zeitzone in /usr/share/zoneinfo/. Vor Version 2.4.5 hat der Brick Viewer aber localtime auf nicht vorhandene Dateien gelinkt, C# gibt dann die FileNotFoundException aus.

 

Wenn du mit dem aktuellen Brick Viewer die Zeitzone des RED-Brick neu setzt, sollte das Problem behoben sein.

 

Um die Zeit des RED-Bricks zu setzen kannst du

date

auf der Kommandozeile oder mit System.Diagnostics.Process verwenden. Zum Beispiel mit

date +%s -u -s @1565681174

(als Unix-Timestamp, so macht es der Brick Viewer) oder mit

date -s "13 AUG 2019 09:25:30"

Share this post


Link to post
Share on other sites

Vielen Dank für die Hilfe👌

Das Programm läuft jetzt auf dem Red Brick.

 

Mir ist leider noch nicht ganz genau klar, wie ich die Zeit auf dem Red Brick manuell manipulieren kann. Muss ich dazu using System.Diagnostics bzw. Using System.Diagnostics.Process einbinden? Denn wenn ich im Programm-Code alleine date verwenden möchte, kennt das Programm den Befehl nicht. Mein Ziel wäre es nämlich die Red Brick Zeit anhand von integer Variablen zu setzen.

 

Zum Beispiel:

int stunde = 12;

int minute = 5;

int sekunde = 12;

Diese Daten dann neu als Red Brick Zeit setzen.

Vielen Dank.😊

Share this post


Link to post
Share on other sites

Process kannst du verwenden, wie hier beschrieben. In deinem Fall müsste

myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";

stattdessen

myProcess.StartInfo.FileName = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stunde, minute, sekunde);

(o.Ä.) sein.

Share this post


Link to post
Share on other sites

Was gerade noch aufgefallen ist: Datum/Zeit zu setzen geht nur mit Root-Rechten. Du kannst aber dem Standarduser (also tf) erlauben, das ohne Root-Passwort zu tun, in dem du auf der seriellen Konsole des RED-Brick einmalig folgenden Befehl ausführst:

echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers

Wenn du dann in deinem Programm

/bin/date

durch

/usr/bin/sudo /bin/date

ersetzt, sollte es klappen.

Share this post


Link to post
Share on other sites

Danke für die Infos.

Hab jetzt einmalig den Befehl:

echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers

 

auf der Red Brick Serial Consol ausgeführt.

 

Zusätzlich habe ich in meinem Code folgende Zeilen geschrieben:

 

using (Process myProcess = new Process())

{

  //myProcess.StartInfo.UseShellExecute = false;

  myProcess.StartInfo.FileName = String.Format("/usr/bin/sudo /bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);

  //myProcess.StartInfo.CreateNoWindow = true;

  myProcess.Start();

}

 

Die auskommentierten Zeilen brauch ich ja nicht oder?

Bei diesem Programm kommt jedenfalls immer ein Fehler beim Aufrufen von myProcess.Start();

Wenn ich diesen Befehl weglasse, wird zwar das Programm ausgeführt jedoch wird die Zeit nicht verändert. (Die Bibliotheken using System;

using System.Diagnostics; using System.ComponentModel; habe ich oben in mein Programm eingebunden)

 

Macht ja nichts, dass ich diesen Programmtext erst mitten in meinem Code geschrieben habe oder?

Vielen Dank für weitere Hilfe :) :)

 

Unbenannt.JPG.25b8cf16e311c413e87f0a6e0afa431b.JPG

Share this post


Link to post
Share on other sites

Ah, manchmal ist man einfach betriebsblind, sorry dafür. Das Problem ist, dass StartInfo den Namen der ausführbaren Datei und die Argumente getrennt will, da ja auch keine Shell benutzt wird (deshalb optionalerweise UseShellExecute = false). So funktioniert es bei mir:

using (Process myProcess = new Process())
{
    myProcess.StartInfo.FileName = "/usr/bin/sudo";
    myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);
    myProcess.Start();
}

Share this post


Link to post
Share on other sites

Ja jetzt läufts, vielen herzlichen Dank :)

Falls ich den Tag, Monat und Jahr ebenfalls noch als integer Variable zu Anpassung der Red Brick Zeit verwenden würde, wie würde sich da die Zeile:

 

myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);

 

 

noch ändern?

Share this post


Link to post
Share on other sites

Hallo, könnte mir bitte jemand noch bei der Anpassung der Zeit mit der Berücksichtigung der Jahreszahl, Monatsangabe und Anzahl des Tages als integer Variabel helfen. Ich weiß nicht genau wie ich die Zeile myProcess.StartInfo.Arguments dementsprechend abändern muss, dass ich diese drei Variablen auch vorgeben kann.

Vielen herzlichen Dank im Voraus😊👍

Share this post


Link to post
Share on other sites

Dafür musst du die Teile in dem Datumsstring auch durch Platzhalter ersetzen, die du dann mit String.Format einsetzt, z.B so:

myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"{0:00} {1} {2:0000} {3:00}:{4:00}:{5:00}\"", jahr, monat, tag, stunde, minute, sekunde);

Den Monat musst du als String reingeben, also z.b. AUG oder SEP. Alternativ kannst du dir mal die anderen Formate ansehen, die date versteht, die sind z.B. hier dokumentiert.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...