Corrigir problema com tarefa cron do ownCloud que não está sendo executada: configure um temporizador systemd confiável.

Ao abrir a página de administração do ownCloud, você percebe que tarefas em segundo plano não foram executadas recentemente, ou que tarefas de limpeza, atividade, armazenamento externo e outras tarefas enfileiradas parecem atrasadas. Uma reação comum é editar cron.phpou adicionar outra entrada no crontab. Na documentação atual do ownCloud Server, essa não é a melhor abordagem: o ownCloud recomenda o modo de execução em segundo plano do Cron e o occ system:croncomando apropriado. Um timer do systemd pode fornecer a camada de agendamento em vez do crontab tradicional em um host Linux.

Este guia se concentra em uma instalação do tipo pacote ou bare-metal, onde o ownCloud reside em um caminho como `/ usr /var/www/owncloud/local/bin`. Se você estiver usando a imagem Docker oficial do ownCloud, pare antes de criar um temporizador de host: a documentação do ownCloud indica que a imagem já configura o cron internamente, controlado por variáveis ​​como `cron_id` OWNCLOUD_CROND_ENABLEDe `cron_id` OWNCLOUD_CROND_SCHEDULE. Consulte a documentação atual de tarefas em segundo plano do ownCloud .

O que já foi verificado, o que depende do seu servidor e o que ainda precisa ser verificado.

  • Verificado: o ownCloud recomenda o Cron em vez do AJAX para execução confiável em segundo plano e o documenta occ system:croncomo o comando para executar tarefas em segundo plano enfileiradas.
  • Depende da sua instalação: o diretório ownCloud, o binário PHP, a conta do servidor web, o ambiente PHP e se você está executando uma instalação de pacote, contêiner, dispositivo ou implantação personalizada.
  • Não é possível saber, a partir de um guia genérico, por que sua tarefa atual falhou. Pode ser um problema de agendamento, mas também pode ser uma questão de permissões, um caminho incorreto, uma configuração diferente do PHP CLI, conectividade com o banco de dados, bloqueio de arquivo ou uma falha em uma tarefa em segundo plano no nível do aplicativo.

Ação: não crie um temporizador até que o mesmo comando do ownCloud funcione manualmente na mesma conta que o temporizador utilizará.

Passo 1: Confirme o modo Cron e teste o ownCloud manualmente.

Para uma instalação típica no estilo Apache/Debian, o usuário web é www-data. Substitua o usuário e o caminho se o seu ambiente for diferente.

sudo -u www-data /var/www/owncloud/occ background:cron
sudo -u www-data /var/www/owncloud/occ system:cron

O primeiro comando seleciona o modo de execução em segundo plano Cron do ownCloud. O segundo executa, de fato, as tarefas em segundo plano enfileiradas. A documentação do comando `occ` do ownCloud afirma que system:cronele se destina à execução agendada e que a saída de progresso não deve ser habilitada em um agendador não interativo.

Terminal do Ubuntu ilustrando o modo Cron do ownCloud e uma execução manual do comando `occ system:cron` como usuário `www-data`.
Uma verificação manual deve ser bem-sucedida antes que o systemd seja envolvido. O resultado exato pode variar; o importante é verificar o status de saída do comando e a ausência de erros de aplicação.

Equívoco comum: o "modo cron" no ownCloud não significa que você precise usar o crondaemon especificamente. Significa que o ownCloud espera que um agendador externo invoque seu executor de tarefas em segundo plano. Um temporizador do systemd pode ser esse agendador.

Ação: se o comando manual falhar, corrija esse erro primeiro. Um temporizador só repetirá a mesma falha em um horário programado.

Etapa 2: Encontre os caminhos corretos do PHP e do ownCloud

Algumas instalações geram occo executável diretamente; outras são mais previsíveis quando invocadas com o binário da linha de comando do PHP. Confirme ambas:

command -v php
readlink -f /var/www/owncloud/occ
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ system:cron

A documentação do ownCloud alerta explicitamente que as tarefas agendadas precisam encontrar o PHP e, portanto, mostra os caminhos completos nos exemplos de cron. Isso é igualmente importante no systemd, pois os serviços recebem um ambiente controlado em vez do seu ambiente de shell interativo.

Ação: substitua /usr/bin/php, /var/www/owncloud, e www-datanos exemplos restantes pelos valores que funcionaram no seu host.

Passo 3: Crie um serviço systemd de execução única

Criar /etc/systemd/system/owncloud-cron.service:

[Unit]
Description=Run ownCloud background jobs
After=network.target

[Service]
Type=oneshot
User=www-data
Group=www-data
WorkingDirectory=/var/www/owncloud
ExecStart=/usr/bin/php -f /var/www/owncloud/occ system:cron

Normalmente, você não precisa de uma [Install]seção para o serviço, pois o temporizador o ativa. Manter o serviço como está Type=oneshottambém facilita a interpretação de seu ciclo de vida: ele inicia, executa o comando uma vez, encerra e volta a ficar inativo.

Terminal do Ubuntu mostrando uma unidade owncloud-cron.service com Type=oneshot, www-data, WorkingDirectory e occ system:cron
O serviço systemd deve chamar o mesmo comando que já foi executado manualmente com sucesso, usando caminhos explícitos e a conta do servidor web.

Equívoco comum: um serviço de execução única inativo não é automaticamente interrompido. Após uma execução bem-sucedida, um serviço de execução única RemainAfterExit=yesnormalmente se torna inativo.

Ação: avalie o sucesso pelo código de saída e pelo registro de atividades, e não esperando que este serviço permaneça "em funcionamento".

Passo 4: Criar o temporizador systemd

Criar /etc/systemd/system/owncloud-cron.timer:

[Unit]
Description=Run ownCloud background jobs every 15 minutes

[Timer]
OnCalendar=*:0/15
Persistent=true
Unit=owncloud-cron.service

[Install]
WantedBy=timers.target

A documentação do host-cron do ownCloud recomenda um agendamento de 15 minutos. O temporizador acima segue essa cadência. Persistent=trueÉ útil usar um OnCalendartemporizador porque o systemd pode acionar uma ativação de calendário perdida depois que a máquina voltar a ficar disponível. O comportamento exato ainda depende da versão do systemd e de quanto tempo a máquina ficou inativa.

Janela do GNU nano mostrando uma unidade owncloud-cron.timer com OnCalendar a cada 15 minutos, Persistent definido como verdadeiro e o serviço owncloud-cron.
Um temporizador de calendário pode espelhar a cadência cron de 15 minutos documentada do ownCloud, mantendo o agendamento e o registro dentro do systemd.

Ação: se você precisar intencionalmente de um intervalo diferente, altere-o deliberadamente em vez de copiar um valor de outro servidor. Execuções mais frequentes podem aumentar a carga em segundo plano; execuções menos frequentes podem atrasar o trabalho em fila.

Passo 5: Recarregue o systemd e ative o temporizador.

sudo systemctl daemon-reload
sudo systemctl enable --now owncloud-cron.timer
sudo systemctl status owncloud-cron.timer

daemon-reloadFaz com que o systemd releia os arquivos de unidade. enable --nowIsso habilita o temporizador para inicializações futuras e o inicia imediatamente.

Terminal do Ubuntu mostrando `systemctl daemon-reload`, `enable --now owncloud-cron.timer` e um status de temporizador de espera ativo.
Um temporizador ativado normalmente deve exibir active (waiting)e identificar o serviço que ele irá acionar.

Ação: se o temporizador não estiver ativo, verifique systemctl status owncloud-cron.timerantes de alterar novamente a configuração do ownCloud.

Etapa 6: Verifique se os temporizadores anterior e seguinte foram executados.

systemctl list-timers owncloud-cron.timer
systemctl list-timers --all | grep owncloud-cron

list-timersÉ a maneira mais rápida de confirmar se o systemd agendou uma próxima ativação e de ver quando o temporizador foi acionado pela última vez. Isso distingue "o temporizador nunca foi executado" de "o temporizador foi executado, mas o ownCloud falhou dentro do serviço".

Terminal do Ubuntu mostrando owncloud-cron.timer ativado e uma entrada list-timers com as ativações anterior e seguinte.
A lista de temporizadores deve mostrar tanto a unidade de temporizador quanto o serviço que ela ativa, juntamente com informações de temporização.
Terminal do Ubuntu exibindo o comando `systemctl list-timers` para o `owncloud-cron.timer` com as colunas `NEXT`, `LAST`, `UNIT` e `ACTIVATES`.
Use as colunas PRÓXIMO e ÚLTIMO para verificar o agendamento, em vez de presumir que a ausência de atividade visível na web significa que o cron está com problemas.

Ação: se NEXT estiver ausente ou o temporizador não estiver listado, verifique novamente o nome do arquivo do temporizador, [Install]a seção e se a unidade foi ativada.

Passo 7: Verifique o registro de serviço, não apenas o temporizador.

O systemd registra a saída do serviço no diário, a menos que você a redirecione deliberadamente para outro local. A documentação oficial do journalctl descreve como filtrar entradas do diário por unidade do systemd.

sudo journalctl -u owncloud-cron.service --since today
sudo journalctl -u owncloud-cron.service -n 100 --no-pager
Terminal do Ubuntu exibindo os logs do journalctl para owncloud-cron.service com entradas de início, processamento em segundo plano e finalização.
O registro de serviços é onde o sucesso do agendador e as falhas dos comandos do ownCloud se diferenciam: um temporizador pode ser acionado corretamente mesmo quando o comando invocado retorna um erro.

Equívoco comum: "O temporizador está ativo, então o cron do ownCloud funciona." Um temporizador ativo apenas comprova que o agendador está aguardando para ser executado. Você ainda precisa de uma invocação de serviço bem-sucedida.

Ação: procure por erros de PHP, mensagens de permissão negada, arquivos ausentes, erros de banco de dados ou um código de saída diferente de zero. Corrija o primeiro erro concreto em vez de reiniciar o temporizador repetidamente.

Etapa 8: Execute uma operação sob demanda e verifique o ownCloud.

Você não precisa esperar 15 minutos para o teste final:

sudo systemctl start owncloud-cron.service
sudo systemctl status owncloud-cron.service
sudo -u www-data /usr/bin/php -f /var/www/owncloud/occ status

Após uma execução systemctl statusbem-sucedida em uma única tentativa, é possível relatar o serviço como inativo e, ao mesmo tempo status=0/SUCCESS, exibir o resultado importante: o comando foi concluído com êxito.

Terminal do Ubuntu mostrando o status do ownCloud (occ), um comando `systemctl start` para iniciar o serviço `owncloud-cron.service`, e o status retornado sendo 0 (SUCESSO).
Iniciar um serviço manualmente é um teste prático e completo do comando exato, usuário, caminhos e ambiente PHP configurados no systemd.

Ação: após o teste de serviço manual ser bem-sucedido, aguarde pelo menos uma ativação do temporizador agendado e confirme se uma nova entrada no diário aparece sem intervenção manual.

Se ainda não funcionar: solucione o problema camada por camada

Sintoma observadoO que isso provaPróxima ação
occ system:cronfalha manualmenteO problema está abaixo da camada de agendamento.Primeiro, corrija erros de PHP, permissões, configuração do ownCloud, banco de dados ou aplicativos.
O comando manual funciona, mas o serviço falha.Seu ambiente de execução do systemd difere do shell.Verifique User=os WorkingDirectory=caminhos completos e o diário.
O serviço funciona manualmente, o temporizador não tem uma próxima execução.O serviço é válido; o agendamento não.Verifique a sintaxe do temporizador, recarregue o systemd e, em seguida, habilite e inicie o temporizador.
O temporizador exibe os horários PRÓXIMO/ÚLTIMO, mas as tarefas do ownCloud ainda apresentam atrasos.O temporizador está disparandoInspecione os registros de serviço e as tarefas em nível de aplicativo em vez de criar outro agendador.
Imagem oficial do DockerO systemd do host pode estar na camada errada.Utilize a configuração cron integrada da imagem, conforme documentado pelo ownCloud.

Uma nota sobre o cron.php e guias antigos.

As instruções antigas do ownCloud geralmente invocavam o comando cron.phpdiretamente. A documentação atual do ownCloud recomenda o uso occ system:crondo comando `source`, e as notas de versão do ownCloud explicam a migração da antiga cron.phpabordagem direta. Consulte as notas de versão do servidor ownCloud .

Ação: se você herdou uma unidade crontab ou systemd antiga que executa cron.php, compare-a com a documentação da sua versão instalada do ownCloud antes de mantê-la.

Lista de verificação final

  • O ownCloud está configurado para tarefas em segundo plano cron.
  • O occ system:croncomando exato é executado com sucesso na conta do servidor web pretendida.
  • owncloud-cron.timerestá habilitado e active (waiting).
  • systemctl list-timersMostra tanto a ativação seguinte quanto a anterior após um período de tempo suficiente.
  • journalctl -u owncloud-cron.serviceMostra execuções agendadas com sucesso.
  • A configuração não duplica o cron já fornecido pela imagem Docker oficial do ownCloud ou por outro agendador.

Quando todas essas verificações forem aprovadas, você terá verificado mais do que apenas "a existência de um temporizador": você terá demonstrado que o systemd agenda a tarefa, invoca o ownCloud na conta correta e conclui com sucesso a execução da tarefa em segundo plano.

Deixar um comentário

10 Melhores Ferramentas de Varredura de Ping para Encontrar Dispositivos na Sua Rede

10 Melhores Ferramentas de Varredura de Ping para Encontrar Dispositivos na Sua Rede

Compare 10 ferramentas de varredura de ping para descoberta rápida de LAN, varredura multiplataforma e gerenciamento de endereços IP. Saiba o que uma varredura pode — e não pode — revelar.

6 Melhores Ferramentas de Gerenciamento de Rede para Monitorar o Desempenho

6 Melhores Ferramentas de Gerenciamento de Rede para Monitorar o Desempenho

Compare seis ferramentas de gerenciamento de rede para monitoramento de desempenho, incluindo cobertura SNMP, mapeamento, alertas, modelos de implantação e custo-benefício.

Melhores analisadores de Wi-Fi para Windows, iOS e Android

Melhores analisadores de Wi-Fi para Windows, iOS e Android

Compare as melhores opções de analisadores de Wi-Fi para Windows, iPhone e Android, incluindo ferramentas para congestionamento de canais, cobertura de sinal, mapas de calor e solução de problemas de rede.

Monitor de Ping: 7 ferramentas gratuitas e de código aberto para disponibilidade de rede

Monitor de Ping: 7 ferramentas gratuitas e de código aberto para disponibilidade de rede

Compare sete monitores de ping gratuitos e de código aberto, desde suítes completas de rede até sondas de latência específicas, e escolha a opção mais adequada para disponibilidade, perda de pacotes e histórico.

Taxa de transferência de rede versus largura de banda: o que significam e como afetam o desempenho

Taxa de transferência de rede versus largura de banda: o que significam e como afetam o desempenho

Veja como a taxa de transferência de rede difere da largura de banda, o que causa desempenho lento ou instável e quais ferramentas podem testar um caminho ou monitorar o tráfego.

Melhor software de servidor SFTP para transferências seguras de arquivos

Melhor software de servidor SFTP para transferências seguras de arquivos

Compare softwares de servidor SFTP confiáveis ​​para Windows e Linux, incluindo OpenSSH, Bitvise, SolarWinds e SFTPGo. Encontre a solução ideal para suas necessidades de segurança e transferência de arquivos.

Melhores práticas de monitoramento de rede: o que monitorar e quais ferramentas usar

Melhores práticas de monitoramento de rede: o que monitorar e quais ferramentas usar

Crie um monitoramento de rede prático com cobertura clara de dispositivos, métricas de desempenho úteis, alertas acionáveis ​​e uma comparação entre SolarWinds NPM, PRTG e OpManager.

As 7 melhores ferramentas de gerenciamento de endereços IP para equipes de rede

As 7 melhores ferramentas de gerenciamento de endereços IP para equipes de rede

Compare sete ferramentas de gerenciamento de endereços IP para descoberta de sub-redes, coordenação de DNS e DHCP, inventário de rede e IPAM de código aberto.

10 Melhores Ferramentas de Varredura de Rede para Descobrir Dispositivos e IPs

10 Melhores Ferramentas de Varredura de Rede para Descobrir Dispositivos e IPs

Compare ferramentas de varredura de rede para descoberta rápida de dispositivos, varreduras de IP multiplataforma e IPAM corporativo, com orientações sobre como escolher a opção mais adequada para sua rede.

6 ferramentas de monitoramento de rede Linux para dispositivos, hosts e tráfego.

6 ferramentas de monitoramento de rede Linux para dispositivos, hosts e tráfego.

Compare seis ferramentas de monitoramento de rede Linux para descoberta de dispositivos SNMP, gráficos de interface, métricas de host, verificação de serviços e fluxos de tráfego.