Rodando simulações em uma rede linux

Nas redes de computadores das universidades é muito comum encontrar computadores bloqueados com o seguinte aviso: "Rodando simulações". Aqui explicaremos uma forma de rodar uma simulação em uma rede linux deixando o computador disponível para que outros usuários possam utiliza-lo.

Devinculando o processo do seu login

Vamos supor que você queria rodar o algoritmo Simulacao.R no software estatístico R. O procedimento mais conhecido é digitar a letra R num terminal e chamar esse script com o comando source('Simulacao.R') ou digitar apenas echo "source('Simulacao.R')" | R --no-save > teste.txt, o último comando executa o arquivo Simulacao.R e salva os resultados no arquivo teste.txt sem salvar o "workspace", para mais opções veja man R. Se você executar qualquer um dos dois comandos e finalizar sua sessão o kernel automaticamente encerrará todos os programas em execução que estão vinculados ao seu login.

Uma forma bem simples e eficiente para evitar esse problema é utilizando o comando nohup, assim para executar o script Simulacao.R devemos digitar num terminal nohup echo "source('Simulacao.R')" | R --no-save > teste.txt & e pronto, agora você pode deslogar e numa outra hora apropriada abrir o arquivo teste.txt e verificar os resultados.

Uma outra forma que será útil apenas para quem tiver em casa um computador conectado a internet, basta se logar remotamente via ssh na rede da sua universidade e executar o comando que quiser.





* A dica abaixo foi enviada pela Francyelle Lima Silva (Doutoranda IME/USP, 2013).

Rodando simulações do Matlab em uma Rede Linux.

Supondo que o usuário queira rodar o algoritmo Simulacao.m no software estatístico Matlab, o procedimento seria:

1 - Chamar esse script com o comando screen matlab -nodisplay -r Simulacao no terminal. Neste caso, o screen faz a mesma função que o nohup, porém é mais eficiente para o Matlab.

2 - Se o usuário deseja salvar os resultados em txt, dentro do script é possível digitar o comando save Resultados.txt C -ascii, onde Resultados deve ser a saída de alguma função(resultados do código).