tmux wird nicht ausgelöst, wenn es in rc.local platziert wird

tmux wird nicht ausgelöst, wenn es in rc.local platziert wird

Ich möchte eintmuxbeim Booten auf einem Raspberry Pi - 2. Ich habe eine Datei geschrieben und sie in einer Datei im Home-Verzeichnis session.shabgelegt . 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.localoder sudo ~/bin/session.shdie 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.txtwird 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.localund der Pi neugestartet. Schließlich sudo tmux awird beim Neustart, wenn Sie die Sitzung mit Once verbinden, eine tmux-Sitzung mit2 Fenster

  1. Die erste ist nur eine leere Sitzung, ausgelöst durchtmux new-session -d -s sess1

  2. und das andere aus dem Befehl, das mit + + tmux new-windowgeöffnet werden kann, da es als ( erwähnt wurdeCTRLB1sess1:1Notiz: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 onbeim Ausführen von Skripten mit tmux dies zu verwenden, falls im Skript im getrennten Modus Fehler auftreten

Antwort2

Ich denke, rc.localdie Umgebung während des Startvorgangs ist nicht umfangreich. Wenn sie irgendwelche kennt $PATHund $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.localoder sudo ~/bin/session.shder Befehl erbtdeinUmgebung und alle Arbeiten.

Um das Problem zu beheben, verwenden Sie den vollständigen Pfad anstelle von ~/. Verwenden Sie den vollständigen Pfad tmuxauch.

verwandte Informationen