Moodle em modo de manutenção: como desativar e por que trava

Moodle em modo de manutenção: como desativar e por que trava

Resposta rápida: Se o painel não abre, desative o modo de manutenção pela linha de comando: entre na pasta do Moodle e rode admin/cli/maintenance.php --disable com o usuário do servidor web (costuma ser www-data ou apache). Depois, confirme que a atualização terminou com admin/cli/upgrade.php e limpe os caches.

Você abre o Moodle e só aparece "o site está em manutenção". Às vezes é só um aviso para os alunos, e o administrador entra normalmente. Em outras, nem o administrador consegue entrar. Isso costuma acontecer depois de uma atualização interrompida ou esquecida no meio do caminho. Este guia mostra como identificar qual dos dois casos é o seu e como desligar o modo de manutenção do jeito certo.

Os dois tipos de modo de manutenção

O Moodle tem dois modos, e o que resolve um não resolve o outro:

  • Modo de manutenção do painel. Ligado em Administração do site > Servidor > Modo de manutenção. Só administradores usam o site; os demais veem uma mensagem ao tentar acessar um curso. A página inicial continua abrindo normalmente, e o administrador vê um aviso de modo de manutenção no canto superior das páginas internas.
  • Modo de manutenção da linha de comando (CLI). É um arquivo, o climaintenance.html, na raiz da pasta de dados (o moodledata). Enquanto ele existe, todo acesso pela web é bloqueado e mostra o conteúdo do arquivo, inclusive para o administrador. Os scripts de linha de comando continuam funcionando, exceto o cron.php.

Para saber qual é o seu: se a página inicial abre e só os cursos mostram o aviso, é o modo do painel. Se todas as páginas mostram a mesma mensagem de manutenção, inclusive o login, é o modo CLI.

Desativar pelo painel

  1. Entre como administrador.
  2. Abra Administração do site > Servidor > Modo de manutenção.
  3. Deixe a opção como desativada e salve.

Se a sua sessão de administrador expirou com o site em manutenção, a documentação oficial lembra que dá para entrar digitando diretamente o endereço da página de login (normalmente /login/index.php).

Desativar pela linha de comando

No modo CLI, ou quando o painel não carrega, use o servidor. Entre na pasta do Moodle e rode os scripts com o usuário do servidor web: a documentação oficial pede isso para evitar problemas de permissão, e o nome costuma ser www-data, apache ou httpd.

cd /var/www/moodle
sudo -u www-data /usr/bin/php admin/cli/maintenance.php
sudo -u www-data /usr/bin/php admin/cli/maintenance.php --disable

O primeiro comando, sem opção, mostra o estado atual. O segundo desativa o modo de manutenção e apaga o climaintenance.html. Duas outras opções úteis são --enable, que liga o modo CLI, e --enablelater=10, que o liga daqui a 10 minutos (útil para avisar os usuários com antecedência).

Sem acesso à linha de comando, dá para apagar o climaintenance.html da raiz do moodledata pelo gerenciador de arquivos do painel ou por FTP. O site volta a abrir. Depois, entre como administrador e confira, no caminho do painel acima, se o modo de manutenção está desativado.

Por que o Moodle fica travado

O modo de manutenção é um interruptor: fica ligado até alguém desligar. Nada o desliga sozinho. Os casos mais comuns:

  • Atualização interrompida. Alguém liga a manutenção, começa o upgrade e ele para no meio, por exemplo porque a conexão SSH caiu, o navegador estourou o tempo ou um plugin falhou. O passo final, que desliga a manutenção, nunca roda. A documentação oficial recomenda o upgrade pela linha de comando em sites grandes, porque pelo navegador ele pode levar horas.
  • Manutenção ligada e esquecida. A documentação avisa que o upgrade.php não liga a manutenção por conta própria. Quem liga também é quem precisa lembrar de desligar.
  • Manutenção agendada. Com --enablelater, o site entra em modo CLI no horário marcado, mesmo que ninguém esteja olhando.

Atenção a uma mensagem parecida: "Site is being upgraded, please retry later" (o site está sendo atualizado). Ela não é o modo de manutenção. É o bloqueio de uma atualização em andamento, que tem prazo e expira sozinho. Se persistir, o caminho é a próxima seção.

Um efeito colateral: com o modo CLI ligado, o cron não roda, e e-mails, backups e certificados ficam parados. Se algo ficou atrasado, veja cron do Moodle não roda.

Conferir se a atualização terminou

Antes de reabrir o site para os alunos, confirme que não sobrou atualização pela metade:

sudo -u www-data /usr/bin/php admin/cli/upgrade.php --is-pending
echo $?

O script informa o resultado também pelo código de saída. O código 2 significa atualização pendente. Se não houver nada a fazer, ele avisa que não precisa de atualização. Com atualização pendente, faça backup (veja como fazer backup do Moodle) e rode o upgrade interativo, que pede confirmação:

sudo -u www-data /usr/bin/php admin/cli/upgrade.php

Se o upgrade parar com erro de plugin ou de requisito, leia a mensagem até o fim: ela diz o que falta. Erros que somem da tela merecem investigação, como no caso de plugins falhando em loop. Quando o upgrade terminar com sucesso, desative a manutenção e limpe os caches:

sudo -u www-data /usr/bin/php admin/cli/maintenance.php --disable
sudo -u www-data /usr/bin/php admin/cli/purge_caches.php

Por fim, abra Administração do site > Notificações e confira a versão instalada. Se o site também não abre fora da manutenção, o problema é outro: veja Moodle com erro 500 e Moodle não abre: o que fazer.

Um cuidado final: nunca rode esses scripts como root. Arquivos criados com o usuário errado dentro do moodledata costumam causar problemas de permissão depois.

Como evitar que aconteça de novo

O jeito mais simples é tratar a manutenção como um roteiro com início e fim: backup, ligar a manutenção, atualizar, desligar a manutenção, limpar os caches e testar com um usuário comum, não só com o administrador. Escreva o passo de desligar no mesmo checklist do passo de ligar. Para atualizar pela linha de comando, rode dentro de uma sessão screen ou tmux, para que uma queda da conexão SSH não interrompa o processo no meio.

E, sempre que possível, ensaie a atualização numa cópia do site antes de fazê-la na produção. É assim que conduzimos o upgrade de Moodle: o processo roda primeiro numa cópia (staging) e a virada acontece numa janela combinada, com backup e plano de volta.

Leia também: Versões do Moodle: datas de suporte e qual usar.

Perguntas frequentes

Como tirar o Moodle do modo de manutenção?

Se você consegue entrar como administrador, vá em Administração do site, Servidor, Modo de manutenção, desative e salve. Se não consegue, rode no servidor, com o usuário do servidor web, o comando php admin/cli/maintenance.php --disable na pasta do Moodle.

Como desativar o modo de manutenção do Moodle pela linha de comando?

Na pasta do Moodle, execute admin/cli/maintenance.php com a opção --disable, usando o usuário do servidor web, como www-data ou apache. O script desativa o modo de manutenção e apaga o arquivo climaintenance.html. Sem opção nenhuma, ele mostra o estado atual.

Por que o Moodle continua em manutenção depois de atualizar?

Porque o modo de manutenção é um interruptor que só desliga quando alguém o desliga. Se a atualização foi interrompida, ou se a manutenção foi ligada e esquecida, ele permanece ativo. A documentação oficial avisa que o script upgrade.php não liga a manutenção por conta própria.

O que é o arquivo climaintenance.html?

É o arquivo que ativa o modo de manutenção da linha de comando. Ele fica na raiz da pasta de dados do Moodle (moodledata). Enquanto existe, todo acesso pela web mostra o conteúdo dele, inclusive para o administrador. Os scripts de linha de comando continuam funcionando, exceto o cron.php.

Como saber se a atualização do Moodle terminou?

Rode php admin/cli/upgrade.php --is-pending na pasta do Moodle. O código de saída 2 indica atualização pendente. Se não houver nada pendente, o script avisa que não precisa de atualização. Também dá para conferir a versão em Administração do site, Notificações.

Alejandro Argachá, especialista em Moodle

Escrito por Alejandro Argachá

Conhece o Moodle desde 2011 e, desde 2016, atua na parte técnica: servidor, código e segurança. Mais de 250 projetos entregues, boa parte para outras empresas que vendem Moodle. Resolve na prática problemas como este em plataformas de empresas e instituições brasileiras. Ver casos reais.