Para que as tarefas em segundo plano do Nextcloud sejam executadas automaticamente com o systemd, configure um serviço de execução única que seja executado cron.phpcomo o usuário do servidor web e, em seguida, habilite um temporizador para iniciar esse serviço a cada cinco minutos. As principais verificações são: o temporizador está habilitado e possui um horário de próxima execução definido, o serviço aponta para os caminhos corretos do Nextcloud e do PHP e o registro do serviço mostra uma saída bem-sucedida. Um serviço de execução única pode exibir o status "inativo (morto)" entre as execuções; isso pode ser normal após a conclusão.
Esta configuração é para uma instalação convencional do Nextcloud no Ubuntu usando systemd, com os arquivos do Nextcloud disponíveis no host. Se o Nextcloud estiver sendo executado dentro do Docker, Snap ou um appliance como o Nextcloud All-in-One, use o método de agendamento documentado dessa distribuição em vez de apontar uma unidade do host para um caminho exclusivo do contêiner. Os exemplos abaixo usam `<caminho_de_instalação>` /var/www/nextcloude `<usuário_HTTP www-data>`; substitua-os pelo caminho de instalação real e pelo usuário HTTP do seu servidor.
O que o temporizador deve realizar
O Nextcloud cron.phpenfileira tarefas em segundo plano, como manutenção e tarefas do aplicativo. O timer do systemd funciona como um relógio; o serviço é o comando que é executado quando o tempo limite do timer expira. Você precisa de ambos. Criar os arquivos sem habilitar o timer deixa o agendamento inativo, enquanto habilitar um timer que aponta para o caminho errado do PHP ou do Nextcloud pode resultar em falhas repetidas na execução.
O Nextcloud recomenda o uso do cron do sistema para tarefas em segundo plano em produção. Seu manual de administração atual também documenta os timers do systemd como uma alternativa. O exemplo de agendamento inicia cinco minutos após a inicialização do sistema e, em seguida, agenda outra execução cinco minutos após cada ativação de serviço. Isso evita depender do acesso do usuário à interface web.
1. Confirme o caminho de instalação, o usuário e a CLI do PHP.
Antes de editar as unidades, localize o diretório do Nextcloud e verifique qual comando PHP a instalação do servidor web espera. Em uma instalação típica do Ubuntu, o caminho pode ser `/usr/local/bin` /var/www/nextcloud, o usuário web geralmente é `/usr/local www-data/bin` e o comando PHP CLI é `php` /usr/bin/php. Verifique em vez de presumir:
ls -l /var/www/nextcloud/cron.php
command -v php
php -v
Se o diretório do Nextcloud estiver em outro local, substitua-o nos dois comandos da unidade abaixo. Se o servidor web usar uma versão diferente do PHP, use o executável da CLI dessa versão em `/etc/php` ExecStarte ` ExecCondition/etc/php`. Um serviço systemd não herda o PATH ou o ambiente do shell interativo, portanto, caminhos explícitos são mais confiáveis.
Teste a verificação de status com o mesmo usuário que o systemd usará:
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e
O comando do Nextcloud occdeve ser executado como o usuário HTTP para preservar a propriedade e as permissões corretas dos arquivos. Se este teste reportar um erro de PHP, modo de manutenção ou um arquivo ausente, corrija isso primeiro; o temporizador não pode compensar uma falha no comando do Nextcloud.
2. Crie o serviço de uso único
Criar /etc/systemd/system/nextcloudcron.service:
sudo nano /etc/systemd/system/nextcloudcron.service
Acesse esta unidade, ajustando o caminho e o usuário caso sua instalação seja diferente:
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
ExecConditionVerifica se o Nextcloud está funcionando normalmente antes de iniciar a tarefa em segundo plano. Se a condição falhar, o systemd ignora a execução; inspecione o registro para saber o motivo. KillMode=processPermite que programas externos iniciados por uma tarefa em segundo plano continuem após o término do processo cron principal. O exemplo atual do Nextcloud não requer uma [Install]seção neste arquivo de serviço.
O uso do PHP /usr/bin/phpé apropriado somente quando esse for o interpretador de linha de comando correto em seu servidor. Por exemplo, um repositório PHP personalizado pode instalar um binário versionado. Use a mesma versão compatível do PHP que o Nextcloud exige e que sua configuração de servidor web utiliza.
3. Crie o temporizador
Criar /etc/systemd/system/nextcloudcron.timer:
sudo nano /etc/systemd/system/nextcloudcron.timer
Adicionar:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5 min
OnUnitActiveSec=5 min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
OnBootSecO agendamento define a primeira execução para cinco minutos após o systemd iniciar na inicialização do sistema. OnUnitActiveSecOutra execução é agendada para cinco minutos após a última ativação do serviço. O temporizador não é o mesmo que o serviço: habilite e inicie a .timerunidade para que o agendamento seja executado automaticamente.
4. Recarregue o systemd e ative o temporizador.
Peça ao systemd para ler os novos arquivos de unidade e, em seguida, habilite e inicie o temporizador em um único comando:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer
Verifique o cronômetro:
systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron
O temporizador deve estar carregado e ativo, e list-timersdeve mostrar um horário futuro em PRÓXIMO. Se estiver desativado, não carregado ou não tiver ativação em PRÓXIMO, verifique se o nome do arquivo termina em .csv .timer, se a [Install]seção contém .csv WantedBy=timers.targete se você executou o comando daemon-reloadapós salvar os arquivos.
5. Execute um teste e verifique o resultado.
Você pode iniciar o serviço uma única vez sem precisar esperar pelo próximo ciclo do temporizador:
sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager
Verifique o resultado do serviço e quaisquer erros de PHP ou Nextcloud. Após a conclusão do comando, nextcloudcron.servicepode ser necessário retornar ao inactive (dead)estado anterior, pois trata-se de uma tarefa única. Isso por si só não significa que houve falha. O temporizador deve permanecer ativo e agendar a próxima execução; o registro de eventos deve mostrar se a execução anterior foi concluída com sucesso.
Nas configurações de administração do Nextcloud, abra a área de status de tarefas em segundo plano e confirme se o último horário de execução da tarefa avança após o acionamento do temporizador. O aviso na visão geral deve desaparecer quando o Nextcloud detectar atividade recente em segundo plano. Aguarde pelo menos um intervalo após ativar o temporizador antes de concluir que a tarefa agendada não foi executada.
Diagnosticar os padrões de falha comuns
| O que você vê | O que verificar | Próximo passo |
| O temporizador está “inativo” ou desativado. | Se a unidade de temporizador foi ativada e iniciada. | Execute o comando e sudo systemctl enable --now nextcloudcron.timer, em seguida, verifique.systemctl list-timers |
| O temporizador está ativo, mas o serviço falha. | O registro de serviços, o executável do PHP, o caminho do Nextcloud e o usuário do serviço. | Execute o teste de status como www-data; corrija o primeiro erro de PHP ou de permissão de arquivo relatado. |
| O serviço fica inativo entre as execuções. | O próximo horário do cronômetro e a última entrada no registro do serviço. | Se o serviço for encerrado com sucesso e o temporizador permanecer ativo, isso é normal para uma unidade de uso único. |
O serviço é encerrado sem ser executado.cron.php | O ExecConditionresultado e se o Nextcloud está em modo de manutenção. | Resolva a falha na condição e verifique o status do Nextcloud antes de iniciar a tarefa manualmente novamente. |
| A página de administração ainda indica que o cron não foi executado. | Se o serviço realmente invoca a instância correta e se o horário da sua última execução muda. | Aguarde o intervalo de tempo definido, inspecione os registros e verifique se você está verificando a mesma instalação do Nextcloud. |
Para obter mais detalhes, consulte os registros de serviço recentes e o arquivo de log do Nextcloud:
sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list
A lista de tarefas mostra o trabalho registrado, mas por si só não comprova que o temporizador está em execução. Utilize em conjunto os horários da última e da próxima ativação do temporizador, o registro de serviços e o indicador de última execução do Nextcloud.
Quando usar um agendador diferente
Os temporizadores do systemd funcionam bem quando o servidor executa o systemd e você deseja um agendamento local gerenciado pelo serviço. Se você já utiliza um daemon cron padrão e pode verificar seu crontab, uma entrada cron do sistema que chama o mesmo cron.phpmétodo www-datatambém é compatível. Não agende ambos os métodos para a mesma instância do Nextcloud; invocações sobrepostas podem desperdiçar recursos e complicar a solução de problemas.
O agendamento AJAX depende de usuários acessando o Nextcloud e é menos confiável para um servidor ocupado ou com múltiplos usuários. O Webcron cron.phputiliza chamadas HTTP e pode ser adequado para instâncias muito pequenas onde o acesso ao sistema não está disponível, mas o Nextcloud observa que a execução via web limita a quantidade de trabalho que pode ser executada por chamada. Se o Nextcloud estiver em um contêiner ou gerenciado por um appliance, utilize o agendador ou a configuração de contêiner compatíveis; um serviço de host /var/www/nextcloudnão funcionará se o caminho não estiver presente no host.
Uma configuração saudável possui um temporizador habilitado com um horário NEXT recorrente, execuções de serviço concluídas sem erros de PHP e um horário de última execução do Nextcloud atualizado. Se todos os três fatores forem verdadeiros, mas uma tarefa específica do aplicativo ainda parecer atrasada, o agendador pode estar trabalhando enquanto essa tarefa aguarda seu próprio agendamento, janela de manutenção ou condições da fila. Diagnostique essa tarefa separadamente antes de alterar o intervalo do temporizador.
Referências oficiais