
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 php
o seguinte é retornado:/usr/bin/php
Quando executo ls -l /usr/bin/php
o seguinte é retornado:lrwxrwxrwx 1 root root 21 Aug 31 18:09 /usr/bin/php -> /etc/alternatives/php
Quando executo ls -l /etc/alternatives/php
o 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 cron
não são executados no mesmo ambiente de tempo de execução que você tem em seu desktop. Nenhuma das suas PATH
alterações ou outras configurações de variáveis de ambiente ~/.bashrc
são propagadas automaticamente para o seu cron
trabalho. 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 cron
trabalhos no crontab
arquivo Read man 5 crontab
.
Veja os resultados echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
em cada um dos seus ambientes.
Por "cada" quero dizer cron
e Desktop, você pode deixar batch
o "terminal não GUI" para mais tarde, se estiver curioso.