Создайте сеанс tmux при запуске, прежде чем войти в систему как пользователь (не root)

Создайте сеанс tmux при запуске, прежде чем войти в систему как пользователь (не root)

Я размещаю небольшой сервер Minecraft для своих друзей у себя дома, и чтобы облегчить себе задачу, я хотел сделать так, чтобы при включении ПК, который используется как сервер, автоматически запускался сервер Minecraft. Дело в том, что я использую tmux, чтобы иметь возможность управлять сервером в случае необходимости. Для этого у меня есть этот скрипт:

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

Я пробовал использовать cron, но безуспешно:

@reboot bash /home/fpp/startup.sh

Он просто не запускает сеанс tmux.

Я также попробовал с помощью systemd unit: [Unit]

Description=mcnrelated.service

After=default.target

[Service]

ExecStart=bash /home/fpp/startup.sh

[Install]

WantedBy=default.target

но при запуске я увидел, что служба не была запущена из-за ошибки.

В качестве последнего варианта я попробовал использовать rc.local:

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

но снова сеанс tmux не был запущен.

Может ли эта проблема быть связана с tmux? или я что-то делаю не так?

EDIT: Лучше воспользоваться systemd.

После долгого общения с ChatGPT я смог выяснить, что в моем скрипте я использовал tputдля получения строк и столбцов терминала. Проблема в том, что он не возвращает значение при запуске в качестве службы, поскольку он не запущен в терминале, и это привело к сбою скрипта. Из-за этого я переключился на файл .tmux.conf, чтобы я мог просто вызвать tmux -t .tmux.confи таким образом избежать использования tput.

Кроме того, как и рекомендовал ChatGPT, теперь я использую пользовательский модуль systemd:

[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

теперь проблема в том, что tmux жалуется на отсутствие терминала для открытия:

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.

и вот где я сейчас. Я пробовал использовать, -uно это не имело успеха.

Проблема в чем-то с tmux, по крайней мере сейчас. Как только я смогу успешно запустить службу, я попробую проверить, запускается ли она автоматически при загрузке

Связанный контент