.png)
Estoy alojando un pequeño servidor de Minecraft para mis amigos en mi casa y, para facilitarme las cosas, quería que cuando encendiera la PC que se usa como servidor, se iniciara automáticamente el servidor de Minecraft. La cosa es que uso tmux para poder gestionar el servidor en caso de que lo necesite. Para eso, tengo este script:
#!/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
Intenté usar cron sin éxito:
@reboot bash /home/fpp/startup.sh
Simplemente no inicia la sesión tmux.
También probé con una unidad systemd: [Unidad]
Description=mcnrelated.service
After=default.target
[Service]
ExecStart=bash /home/fpp/startup.sh
[Install]
WantedBy=default.target
pero al iniciar, pude ver que el servicio no se inició debido a un error.
Como última opción intenté usar rc.local:
#!/bin/bash
sudo su -c "./home/fpp/startup.sh" -s /bin/sh fpp
exit 0
pero nuevamente, no se inició ninguna sesión tmux.
¿Puede este problema estar relacionado con tmux? o estoy haciendo algo mal?
EDITAR: El camino a seguir es con systemd.
Después de conversar mucho con ChatGPT, pude descubrir que en mi script estaba usando tput
para obtener las filas y columnas del terminal. El problema con esto es que no devolverá un valor cuando se ejecute como servicio, porque no se ejecuta en una terminal e hizo que el script fallara. Por eso, cambié al archivo .tmux.conf, así puedo simplemente llamar tmux -t .tmux.conf
y de esa manera evito usar tput
.
Además, como recomendó ChatGPT, ahora estoy usando una unidad systemd a nivel de usuario:
[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
El problema ahora es que tmux se queja de no tener terminal para abrir:
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.
y ahí es donde estoy ahora. Intenté usarlo -u
pero no tuvo éxito.
El problema es algo relacionado con tmux, al menos por ahora. Una vez que pueda iniciar con éxito el servicio, intentaré ver si se inició automáticamente en el arranque.