Antes de mais nada, obrigado aos dois, mas especialmente para você Ricardo, pois acho que você sacou a raiz do problema. Bom, vamos por partes. Posto o que que você pediu para eu fazer, e o que eu fiz:
Espero que você saiba programar para adaptar o código que eu estou postando aqui.
Uma das possíveis causas da aplicação fechar é da comunicação por SSH cair. Para resolver isso mude o comando de "sudo 7dtd.sh Start Servidor" para "sudo nohup 7dtd.sh Start Servidor". Desta forma mesmo se o SSH cair o jogo não vai fechar (ver man nohup).
Testei no terminal e deu os seguintes resultados:
root@vps56aac3f177d23:~# sudo nohup 7dtd.sh Start Servidor
nohup: ignoring input and appending output to 'nohup.out'
root@vps56aac3f177d23:~# sudo 7dtd.sh Status Servidor
Instance: Servidor
Status: Running
Open ports:
/* Omitido por segurança */
/usr/local/lib/7dtd/common.sh: line 195: nc: command not found
Players:
Game info:
Server name: BR - Walking Dead (novo host/Sem Dogs/PvE)
Password:
Max players: 10
World: Random Gen
/* Omitido */
root@vps56aac3f177d23:~#
Depois tentei fazer o comando que você informou:
No cron você deve chamar um script para testar se o programa está rodando. No arquivo /etc/crontab adicione a seguinte linha "* * * * * root /caminho_para_o_script". Desta forma o cron vai chamar o script uma vez por minuto.
Por fim precisa fazer o script. Vamos por partes. Primeiro precisamos de um comando que verifique se o serviço está rodando, o comando é "ps a | grep "sudo nohup 7dtd.sh Start Servidor" | wc -l > ehdois.txt". Esse comando exibe os processos rodando (ps a), seleciona apenas as linhas que tem a string "sudo nohup 7dtd.sh Start Servidor" (grep ...), conta as linhas (wc -l) e coloca o resultado no arquivo ehdois.txt. Por fim deve-se comparar o resultado do arquivo ehdois.txt para ver se ele tem como conteúdo o número 2, para isso crie um arquivo chamado dois.txt (echo "2" > dois.txt) e compare para ver se tem diferença nos arquivos (diff ehdois.txt dois.txt). Note que o número 1 no arquivo significa apenas o comando grep procurando a string específica, o resultado 2 significa o grep e o serviço rodando (rode o comando "ps a" com o serviço rodando para entender melhor).
Vamos finalmente para o script:
#!/bin/bash
diferenca=$(diff dois.txt ehdois.txt)
if [ $diferenca -ne 0 ] then
sudo nohup 7dtd.sh Start Servidor
Eu não testei todo o processo. Mas deve funcionar. Uma parte que pode possivelmente não funcionar é o comando ps a, talvez você deva usar o comando ps ax para exibir todos os processos. Outra coisa, talvez o processo não seja encontrado pelo comando do script e você precise saber o nome do processo exato, para isso use o comando ps ax e encontre o processo desejado.
Se precisar de mais ajuda poste aqui que eu detalho mais.
No caso digitei os seguintes comandos sem erro no terminal:
root@vps56aac3f177d23:~# ps a | grep "sudo nohup 7dtd.sh Start Servidor" | wc -l > ehdois.txt
root@vps56aac3f177d23:~# echo "2" > dois.txt
Mas, usei um ps ax para ver os processos e lembrei que ele na verdade chama um outro script para iniciar o jogo:
root@vps56aac3f177d23:~# ps a | grep "sudo nohup 7dtd.sh Start Servidor"
root@vps56aac3f177d23:~# ps a
PID TTY STAT TIME COMMAND
1668 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
1669 tty1 Ss+ 0:00 /sbin/getty 38400 console
5808 pts/0 Ss+ 0:00 -bash
15390 pts/3 Ss 0:00 -bash
26052 pts/3 R+ 0:00 ps a
root@vps56aac3f177d23:~# ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init
2 ? S 0:00 [kthreadd/100933]
3 ? S 0:00 [khelper/100933]
197 ? Ss 0:00 /lib/systemd/systemd-udevd --daemon
459 ? Ss 0:00 /usr/sbin/xinetd -dontfork -pidfile /var/run/xinetd.p
462 ? Ss 0:00 /usr/sbin/sshd -D
480 ? Ss 0:01 cron
1668 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
1669 tty1 Ss+ 0:00 /sbin/getty 38400 console
5797 ? Ss 0:00 sshd: root@pts/0
5808 pts/0 Ss+ 0:00 -bash
11385 ? Ss 0:00 sshd: root@notty
11396 ? Ss 0:00 /usr/lib/openssh/sftp-server
15299 ? Ss 0:00 sshd: root@pts/3
15390 pts/3 Ss 0:00 -bash
[u][b]21225 ? Sl 0:54 /home/sdtd/engine/7DaysToDieServer.x86 -logfile /home[/b][/u]
21263 ? S 0:00 /bin/bash /usr/local/lib/7dtd/monitor-log.sh Servidor
21299 ? S 0:00 tail -n 5000 -F /home/sdtd/instances/Servidor/logs/20
21300 ? S 0:00 tr \\ /
21301 ? S 0:00 tr -d \r
21302 ? S 0:00 grep -v ^(Filename:
21303 ? S 0:00 sed -r s/^[0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+:[0-9]+ [
21304 ? S 0:00 /bin/bash /usr/local/lib/7dtd/monitor-log.sh Servidor
26054 pts/3 R+ 0:00 ps ax
31863 ? S 0:00 /home/sdtd/engine/7DaysToDieServer.x86 -logfile /home
Esse é o processo que faz iniciar o jogo:
21225 ? Sl 0:54 /home/sdtd/engine/7DaysToDieServer.x86 -logfile /homePara completar, a saída do ehdois.txt, deu 1 no meu servidor.