Se a página de administração do ownCloud indicar que as tarefas em segundo plano não estão sendo executadas, a limpeza em fila e outros trabalhos agendados podem sofrer atrasos até que alguém acesse o site. Em um servidor Linux gerenciado pelo systemd, configure o modo de tarefas em segundo plano do ownCloud para Cron e use um temporizador para executar occ system:croncomo a conta do servidor web. A documentação atual do ownCloud Server recomenda o uso do cron do sistema para tarefas regulares em segundo plano e menciona especificamente os temporizadores do systemd como outra forma de agendar comandos.
Este guia destina-se ao ownCloud Server Classic instalado diretamente em um host Linux. Ele não se aplica ao ownCloud Infinite Scale, que possui uma arquitetura diferente, nem à imagem oficial do ownCloud para Docker, que já executa o cron internamente. Para o Docker, siga as configurações documentadas da imagem em vez de criar um segundo timer de host. Consulte a documentação atual sobre tarefas em segundo plano do ownCloud Server .
Verifique o comando antes de alterar a programação.
Um serviço systemd define o comando a ser executado; um temporizador inicia esse serviço periodicamente. Primeiro, confirme o caminho de instalação do ownCloud e a conta do servidor HTTP. Os exemplos abaixo usam `sudo` /var/www/owncloude www-data`user`, comuns no Debian e Ubuntu. Outras distribuições Linux podem usar `user` wwwrun, apache`user` ou outra conta.
Execute o comando ownCloud manualmente com essa conta para distinguir um comando com falha de um agendamento com falha:
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron
Altere o executável e o caminho do PHP para occcorresponder ao seu servidor. O ownCloud recomenda o uso de `php -r` system:cronpara tarefas em segundo plano; guias antigos que utilizam agendamento cron.phppodem se referir a comportamentos legados. Um comando em execução pode terminar sem exibir uma mensagem de sucesso, portanto, verifique seu status de saída echo $?imediatamente após a execução: 0`php -r` significa que o comando foi concluído com sucesso. Se retornar um erro, corrija primeiro o caminho, a instalação do PHP CLI, as permissões, a conectividade com o banco de dados ou o erro do ownCloud. O temporizador executará repetidamente o mesmo comando com falha se você ignorar esta verificação.
Configure o ownCloud para o modo Cron.
Nas configurações de administrador do ownCloud, abra a seção "Tarefas em segundo plano" ou "Cron" e selecione "Cron" . Você também pode configurar o agendador a partir do diretório de instalação com o seguinte comando:
cd /var/www/owncloud
sudo -E -u www-data php occ background:cron
Isso seleciona o modo Cron; o comando agendado permanece occ system:cron. O manual do ownCloud afirma que este comando é equivalente a selecionar Cron na página de administração. O Cron é preferível para um servidor que precisa processar tarefas de forma confiável, pois o AJAX depende de visitas à página e pode deixar tarefas em espera durante períodos de baixa atividade. Para uma pequena instância pessoal, o AJAX pode ser mais fácil, mas é menos previsível.
Crie o serviço systemd e o temporizador.
Crie /etc/systemd/system/owncloudcron.servicecom sua conta HTTP real e o caminho do ownCloud:
[Unit]
Description=ownCloud background jobs
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/var/www/owncloud
ExecStart=/usr/bin/php -f /var/www/owncloud/occ system:cron
Type=oneshotInforma ao systemd que o comando deve ser executado até o fim e, em seguida, encerrar. Fornecer o caminho completo do PHP evita depender dos recursos limitados PATHdisponíveis para os serviços do sistema. O diretório de trabalho ajuda o ownCloud a resolver caminhos relativos. Mantenha a conta de serviço alinhada com o proprietário dos arquivos e dados do ownCloud. Não execute a tarefa como root.
Em seguida, crie /etc/systemd/system/owncloudcron.timer:
[Unit]
Description=Run ownCloud background jobs every 15 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=15min
Unit=owncloudcron.service
[Install]
WantedBy=timers.target
O manual do ownCloud recomenda uma cadência de 15 minutos para o exemplo padrão do cron e reconhece os temporizadores do systemd como uma alternativa de agendamento. Esse temporizador inicia cinco minutos após a inicialização do sistema e, em seguida, agenda novas execuções 15 minutos após a ativação do serviço. Se sua carga de trabalho exigir outro intervalo, altere-o OnUnitActiveSeccuidadosamente e considere o tempo necessário para a conclusão de cada execução. Evite configurar outra entrada no crontab para o mesmo comando; agendadores duplicados podem iniciar execuções redundantes e dificultar a solução de problemas.
Diga ao systemd para recarregar suas definições de unidade e, em seguida, habilite e inicie o temporizador:
sudo systemctl daemon-reload
sudo systemctl enable --now owncloudcron.timer
daemon-reloadÉ necessário após criar ou editar arquivos de unidade. Habilitar o temporizador faz com que ele inicie automaticamente após inicializações futuras; --nowinicia-o na sessão atual. Habilite a unidade do temporizador, não apenas o serviço.
Descubra por que uma execução foi ignorada ou falhou.
Verifique se o temporizador está ativado e quando ele será executado novamente:
systemctl is-enabled owncloudcron.timer
systemctl list-timers --all owncloudcron.timer
systemctl status owncloudcron.timer
Um temporizador ativado deve aparecer na lista de temporizadores com uma próxima ativação. Caso contrário, confirme o nome do arquivo da unidade, recarregue o systemd e ative o temporizador novamente. Se o temporizador mostrar uma execução, mas o trabalho do ownCloud ainda estiver atrasado, inspecione o serviço e seus logs:
systemctl status owncloudcron.service
sudo journalctl -u owncloudcron.service --since today
Procure por caminhos incorretos, diretórios de dados inacessíveis, extensões PHP ausentes ou erros no banco de dados. Teste manualmente o comando exato no arquivo de serviço para www-datareproduzir o ambiente da forma mais fiel possível. Verifique também se você usou o comando `owncloud` occ system:cron, em vez de copiar um exemplo do Nextcloud que invoca ` cron.php.
Verifique se o ownCloud está processando tarefas.
Após um ou dois intervalos de temporizador, confirme se o serviço foi concluído com sucesso e se o temporizador tem uma ativação posterior agendada. Em seguida, verifique o status da tarefa em segundo plano na página de administração do ownCloud. O horário da última execução exibido deve avançar e um aviso de tarefa Cron desatualizada deve desaparecer. Se o systemd relatar sucesso, mas o aviso permanecer, inspecione o log de aplicativos do ownCloud e verifique se a interface web está conectada à mesma instância e banco de dados que a instalação pela linha de comando utiliza.
Para contêineres oficiais do ownCloud, não instale essas unidades de host a menos que você tenha desativado intencionalmente o agendador interno do contêiner e a documentação atual do ownCloud suporte sua configuração. A configuração aqui apresentada é uma solução em nível de host para o ownCloud clássico no systemd; nomes de serviço, caminhos, versões do PHP e comportamento do contêiner dependem da implantação.