Ich möchte eintmuxbeim Booten auf einem Raspberry Pi - 2. Ich habe eine Datei geschrieben und sie in einer Datei im Home-Verzeichnis session.sh
abgelegt . Diese ist auch in der Datei enthalten und kann daher ausgelöst werden.~/bin/
~/bin/
$PATH
Die Bash-Datei sieht folgendermaßen aus:
#!/bin/sh
mySession(){
tmux new-session -d -s SessionName
tmux new-window -d -n 'windowName' "~/bin/myPythonScript.py"
}
mySession
exit 0
ich habe gegebenAusführungRechte für alle Skripte, einschließlich des oben genannten Bash-Skripts, mitchmod +x session.sh
Imrc.localIch bezeichne diese Datei als Trigger wie folgt:
#!/bin/sh
scriptSession(){
echo "starting the tmux session"
~/bin/session.sh &
}
scriptSession
exit 0
Ich habe mehrmals versucht, meinen Pi neu zu starten, aber die Sitzung wird nie ausgelöst.
wenn ich ausführe sudo tmux ls
, wird nur angezeigterror Connecting to Server
aber wenn ich das tue sudo /etc/rc.local
oder sudo ~/bin/session.sh
die Sitzung beginnt! Ich möchte nicht, dass dies geschieht, da ich einen automatischen Start beim Booten und keine vom Benutzer ausgelöste Sitzung möchte
Irgendeine Idee, was das Problem sein könnte?
Bearbeiten
Ich habe auch versucht, ein Fehlerprotokoll in einer Bash-Subshell zu sammeln, indem ich Folgendes in derrc.localDatei:
(scriptSession)&>>/var/log/myLog.txt
aber dann cat /var/log/myLog.txt
wird nichts angezeigt und das Skript schlägt immer noch fehl
Antwort1
Die optimale Lösung zur Fehlerbehebung bei jedem abgetrennten Skript mittmuxmüssen Sie in Ihrem Auslöseskript die folgende Option verwenden:
#!/bin/bash
# this script is called "sess"
tmux new-session -d -s sess1
# this statement is a life-saver for tmux detached sessions
tmux set-option -t sess1 remain-on-exit on
# In my case running the script in a new window worked
tmux new-window -d -n 'nameofWindow' -t sess1:1 'sudo /home/pi/bin/script.py'
exit 0
Nun wurde das folgende Skript aufgerufen rc.local
und der Pi neugestartet. Schließlich sudo tmux a
wird beim Neustart, wenn Sie die Sitzung mit Once verbinden, eine tmux-Sitzung mit2 Fenster
Die erste ist nur eine leere Sitzung, ausgelöst durch
tmux new-session -d -s sess1
und das andere aus dem Befehl, das mit + +
tmux new-window
geöffnet werden kann, da es als ( erwähnt wurdeCTRLB1sess1:1
Notiz:Hotkeys können je nach Benutzer unterschiedlich sein, der Standard-Hotkey (Bindkeys) von tmux ist CTRL+ B)
Inferenz
Wenn das Skript mit einem Fehler endet, wird im Fenster angezeigt, wo der Fehler aufgetreten ist. In meinem Fall waren es Fehler in meinem Python-Skript. Ganz unten wird angezeigt:Pane ist tot. Aufgrund von Fehlern im Skript ist dietmuxDie Sitzung wurde beendet, ohne dass ein relevantes Protokoll (Feedback) abgegeben wurde. Daher wurde im oben genannten Protokoll keine Ausgabe protokolliert./tmp/tmux.log
Daher wird immer empfohlen, set-remain-on-exit on
beim Ausführen von Skripten mit tmux dies zu verwenden, falls im Skript im getrennten Modus Fehler auftreten
Antwort2
Ich denke, rc.local
die Umgebung während des Startvorgangs ist nicht umfangreich. Wenn sie irgendwelche kennt $PATH
und $HOME
(die Shell wird erweitert ~
auf $HOME
), handelt es sich dabei nicht um Ihre (normalen Benutzer-)Variablen. Ich denke, sie sind möglicherweise nicht gesetzt. Außerdem erbt das Skript diese eingeschränkte Umgebung.
Wenn Sie dies jedoch tun sudo /etc/rc.local
oder sudo ~/bin/session.sh
der Befehl erbtdeinUmgebung und alle Arbeiten.
Um das Problem zu beheben, verwenden Sie den vollständigen Pfad anstelle von ~/
. Verwenden Sie den vollständigen Pfad tmux
auch.