
Tengo problemas para configurar correctamente el siguiente trabajo CRON para automatizar las copias de seguridad en el sitio web de mi cliente.
El sitio está basado en Joomla y estoy usando Akeeba Backup para gestionar las copias de seguridad. Las recomendaciones para los trabajos CRON de línea de comandos son las siguientes:
Utilice el siguiente comando en la interfaz CRON de su host: /path/to/php /var/www/domain.com/cli/akeeba-backup.php
Recuerde sustituir /path/to/php con la ruta real al ejecutable PHP CLI (Interfaz de línea de comando) de su host. Recuerde que debe utilizar el ejecutable PHP CLI; El ejecutable PHP CGI (Common Gateway Interface) no funcionará con nuestros scripts CRON. Si no está seguro de lo que esto significa, consulte a su anfitrión. Son las únicas personas que pueden proporcionar esta información.
dominio.com utilizado como ejemplo
Tengo CRON instalado y ejecutándose en Ubuntu 20.04.
El siguiente código está encrontab -e
0 3 * * * /usr/bin/php7.4 /var/www/domain.com/cli/akeeba-backup.php --profile=1 --description="Full automated backup"
El sitio ejecuta PHP 7.4 con FPM instalado.
Cuando ejecuto which php
me devuelve lo siguiente:/usr/bin/php
Cuando ejecuto ls -l /usr/bin/php
me devuelve lo siguiente:lrwxrwxrwx 1 root root 21 Aug 31 18:09 /usr/bin/php -> /etc/alternatives/php
Cuando ejecuto ls -l /etc/alternatives/php
me devuelve lo siguiente:lrwxrwxrwx 1 root root 15 Aug 31 18:53 /etc/alternatives/php -> /usr/bin/php8.0
Como esto muestra la versión 8.0 en lugar de la 7.4, que usa el sitio, ¿significa que el trabajo CRON debería usar la versión 8 en su lugar?
Salida de registro de muestra 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)
Cualquier ayuda es muy apreciada.
Respuesta1
Los trabajos ejecutados cron
no se ejecutan en el mismo entorno de ejecución que tiene en su escritorio. Ninguno de sus PATH
cambios u otras configuraciones de variables de entorno ~/.bashrc
se propagan automáticamente a su cron
trabajo. Por ejemplo, no existe $DISPLAY
, por lo que los programas GUI necesitan un tratamiento especial (leer man xhost
).
Se pueden establecer variables de entorno para todos cron
los trabajos en el crontab
archivo Read man 5 crontab
.
Mira los resultados de echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
en cada uno de tus entornos.
Por "cada uno" me refiero cron
a Escritorio, puedes dejar batch
un "terminal sin GUI" para más adelante, si tienes curiosidad.