.png)
Estou hospedando um pequeno servidor de minecraft para meus amigos em minha casa, e para facilitar as coisas para mim, queria fazer com que quando eu ligar o pc que é usado como servidor, inicie automaticamente o servidor de minecraft. Acontece que eu uso o tmux para poder gerenciar o servidor caso precise. Para isso, tenho 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
Eu tentei usar o cron sem sucesso:
@reboot bash /home/fpp/startup.sh
Simplesmente não iniciará a sessão do tmux.
Eu também tentei com uma unidade systemd: [Unit]
Description=mcnrelated.service
After=default.target
[Service]
ExecStart=bash /home/fpp/startup.sh
[Install]
WantedBy=default.target
mas ao iniciar, percebi que o serviço não foi iniciado devido a um erro.
Como última opção tentei usar rc.local:
#!/bin/bash
sudo su -c "./home/fpp/startup.sh" -s /bin/sh fpp
exit 0
mas, novamente, nenhuma sessão do tmux foi iniciada.
Esse problema pode estar relacionado ao tmux? ou estou fazendo algo errado?
EDIT: O caminho a percorrer é com o systemd.
Depois de conversar muito com o ChatGPT, consegui descobrir que no meu script estava usando tput
para obter as linhas e colunas do terminal. O problema é que ele não retornará um valor quando for executado como um serviço, porque não é executado em um terminal e faz com que o script falhe. Por conta disso, mudei para o arquivo .tmux.conf, para poder apenas ligar tmux -t .tmux.conf
e assim evito usar tput
.
Além disso, conforme recomendado pelo ChatGPT, agora estou usando uma unidade systemd em nível de usuário:
[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
o problema agora é que o tmux está reclamando de não ter 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.
e é onde estou agora. Já tentei usar -u
mas não tive sucesso.
O problema é algo com o tmux, pelo menos por enquanto. Assim que conseguir iniciar o serviço com sucesso, tentarei ver se ele foi iniciado automaticamente na inicialização