Problemas com a execução do trabalho CRON no Ubuntu 20.04 com PHP 7.4 FPM

Problemas com a execução do trabalho CRON no Ubuntu 20.04 com PHP 7.4 FPM

Estou tendo problemas para configurar corretamente o seguinte trabalho CRON para automatizar backups no site do meu cliente.

O site é baseado em Joomla e estou usando o Akeeba Backup para lidar com os backups. As recomendações para os trabalhos CRON da linha de comando são as seguintes:

Use o seguinte comando na interface CRON do seu host: /path/to/php /var/www/domain.com/cli/akeeba-backup.php

Lembre-se de substituir /path/to/php pelo caminho real para o executável PHP CLI (Command Line Interface) do seu host. Lembre-se de que você deve usar o executável PHP CLI; o executável PHP CGI (Common Gateway Interface) não funcionará com nossos scripts CRON. Se não tiver certeza do que isso significa, consulte seu anfitrião. Eles são as únicas pessoas que podem fornecer essas informações.

domínio.com usado como exemplo

Tenho o CRON instalado e rodando no Ubuntu 20.04.

O código a seguir está emcrontab -e

0 3 * * * /usr/bin/php7.4 /var/www/domain.com/cli/akeeba-backup.php --profile=1 --description="Full automated backup"

O site está rodando PHP 7.4 com FPM instalado.

Quando executo which phpo seguinte é retornado:/usr/bin/php

Quando executo ls -l /usr/bin/phpo seguinte é retornado:lrwxrwxrwx 1 root root 21 Aug 31 18:09 /usr/bin/php -> /etc/alternatives/php

Quando executo ls -l /etc/alternatives/phpo seguinte é retornado:lrwxrwxrwx 1 root root 15 Aug 31 18:53 /etc/alternatives/php -> /usr/bin/php8.0

Como isso mostra a versão 8.0 em vez da 7.4, que o site está usando, isso significa que o trabalho CRON deveria usar a versão 8.

Exemplo de saída de log de/var/log/syslog

Oct 1 11:39:01 domain CRON[38538]: (root) CMD ( [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi)

Qualquer ajuda é muito apreciada.

Responder1

Os trabalhos executados cronnão são executados no mesmo ambiente de tempo de execução que você tem em seu desktop. Nenhuma das suas PATHalterações ou outras configurações de variáveis ​​de ambiente ~/.bashrcsão propagadas automaticamente para o seu crontrabalho. Por exemplo, não existe $DISPLAY, então os programas GUI precisam de tratamento especial (leia man xhost).

É possível definir variáveis ​​de ambiente para todos os crontrabalhos no crontabarquivo Read man 5 crontab.

Veja os resultados echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasem cada um dos seus ambientes.

Por "cada" quero dizer crone Desktop, você pode deixar batcho "terminal não GUI" para mais tarde, se estiver curioso.

informação relacionada