Erstellen Sie beim Start eine tmux-Sitzung, bevor Sie sich als Benutzer (nicht als Root) anmelden.

Erstellen Sie beim Start eine tmux-Sitzung, bevor Sie sich als Benutzer (nicht als Root) anmelden.

Ich hoste bei mir zu Hause einen kleinen Minecraft-Server für meine Freunde und um mir die Arbeit zu erleichtern, wollte ich es so einrichten, dass der Minecraft-Server automatisch gestartet wird, wenn ich den PC einschalte, der als Server verwendet wird. Die Sache ist, dass ich tmux verwende, um den Server bei Bedarf verwalten zu können. Dafür habe ich dieses Skript:

#!/bin/bash

SESSION="server"
SESSIONEXISTS=$(tmux list-sessions | grep -w "$SESSION")

if [ "$SESSIONEXISTS" = "" ]
then

  tmux new-session -d -s "$SESSION" -d -x "$(tput cols)" -y "$(tput lines)"

  tmux rename-window -t 0 'mc'
  tmux send-keys -t 'mc' 'cd magma-1.18.2-40.2.10 && ./run.sh && sudo shutdown now' C-m
  tmux splitw -v

  tmux send-keys -t 'mc' 'glances' C-m
  tmux select-pane -t 0
  tmux splitw -h

  tmux send-keys -t 'mc' 'ngrok start --all' C-m

  tmux select-pane -t 0

fi

tmux attach-session -t "$SESSION":0

Ich habe erfolglos versucht, cron zu verwenden:

@reboot bash /home/fpp/startup.sh

Die Tmux-Sitzung wird einfach nicht gestartet.

Ich habe es auch mit einer systemd-Einheit versucht: [Unit]

Description=mcnrelated.service

After=default.target

[Service]

ExecStart=bash /home/fpp/startup.sh

[Install]

WantedBy=default.target

aber beim Start konnte ich sehen, dass der Dienst aufgrund eines Fehlers nicht gestartet wurde.

Als letzte Option habe ich versucht, rc.local zu verwenden:

#!/bin/bash
sudo su -c "./home/fpp/startup.sh" -s /bin/sh fpp
exit 0

Aber erneut wurde keine Tmux-Sitzung gestartet.

Kann dieses Problem mit tmux zusammenhängen? Oder mache ich etwas falsch?

BEARBEITEN: Der richtige Weg ist systemd.

Nachdem ich viel mit ChatGPT gechattet hatte, konnte ich herausfinden, dass ich in meinem Skript tputdie Zeilen und Spalten des Terminals abrufen wollte. Das Problem dabei ist, dass es keinen Wert zurückgibt, wenn es als Dienst ausgeführt wird, da es nicht in einem Terminal ausgeführt wird und das Skript fehlschlägt. Aus diesem Grund bin ich zur Datei .tmux.conf gewechselt, sodass ich einfach aufrufen kann tmux -t .tmux.confund auf diese Weise die Verwendung vermeide tput.

Außerdem verwende ich jetzt, wie von ChatGPT empfohlen, eine systemd-Einheit auf Benutzerebene:

[Unit]
Description=Launch Minecraft Server and Related Services
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/tmux -u -f /home/fpp/tmux-config/tmux.conf
RemainAfterExit=true

[Install]
WantedBy=default.target

das Problem besteht jetzt darin, dass tmux sich beschwert, dass kein Terminal zum Öffnen vorhanden ist:

fpp@fpp-server:~$ systemctl --user status mcnrelated.service
× mcnrelated.service - Launch Minecraft Server and Related Services
     Loaded: loaded (/home/fpp/.config/systemd/user/mcnrelated.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2023-09-21 11:42:09 -03; 8min ago
    Process: 1319 ExecStart=/usr/bin/tmux -u -f /home/fpp/.tmux.conf (code=exited, status=1/FAILURE)
   Main PID: 1319 (code=exited, status=1/FAILURE)
        CPU: 37ms

sep 21 11:42:09 fpp-server systemd[550]: Starting mcnrelated.service - Launch Minecraft Server and Related Services...
sep 21 11:42:09 fpp-server tmux[1319]: open terminal failed: not a terminal
sep 21 11:42:09 fpp-server systemd[550]: mcnrelated.service: Main process exited, code=exited, status=1/FAILURE
sep 21 11:42:09 fpp-server systemd[550]: mcnrelated.service: Failed with result 'exit-code'.
sep 21 11:42:09 fpp-server systemd[550]: Failed to start mcnrelated.service - Launch Minecraft Server and Related Services.

und da bin ich jetzt. Ich habe versucht, -uaber das hatte keinen Erfolg.

Das Problem liegt zumindest im Moment an tmux. Sobald ich den Dienst erfolgreich starten kann, werde ich versuchen zu sehen, ob er beim Booten automatisch gestartet wird.

verwandte Informationen