
У меня возникли проблемы с правильной настройкой следующего задания CRON для автоматизации резервного копирования на веб-сайте моего клиента.
Сайт основан на Joomla, и я использую Akeeba Backup для управления резервными копиями. Рекомендации для заданий CRON командной строки следующие:
Используйте следующую команду в интерфейсе CRON вашего хоста: /path/to/php /var/www/domain.com/cli/akeeba-backup.php
Не забудьте заменить /path/to/php на реальный путь к исполняемому файлу PHP CLI (Command Line Interface) вашего хоста. Помните, что вы должны использовать исполняемый файл PHP CLI; исполняемый файл PHP CGI (Common Gateway Interface) не будет работать с нашими скриптами CRON. Если вы не уверены, что это значит, обратитесь к своему хостеру. Они единственные, кто может предоставить эту информацию.
domain.com использован в качестве примера
У меня установлен и запущен CRON на Ubuntu 20.04.
Следующий код находится вcrontab -e
0 3 * * * /usr/bin/php7.4 /var/www/domain.com/cli/akeeba-backup.php --profile=1 --description="Full automated backup"
Сайт работает под управлением PHP 7.4 с установленным FPM.
При запуске which php
возвращается следующее:/usr/bin/php
При запуске ls -l /usr/bin/php
возвращается следующее:lrwxrwxrwx 1 root root 21 Aug 31 18:09 /usr/bin/php -> /etc/alternatives/php
При запуске ls -l /etc/alternatives/php
возвращается следующее:lrwxrwxrwx 1 root root 15 Aug 31 18:53 /etc/alternatives/php -> /usr/bin/php8.0
Поскольку здесь показана версия 8.0 вместо 7.4, которую использует сайт, означает ли это, что задание CRON должно использовать версию 8?
Пример вывода журнала из/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)
Любая помощь будет высоко оценена.
решение1
Задания, которые запускаются, cron
не запускаются в той же среде выполнения, что и на вашем рабочем столе. Никакие ваши PATH
изменения или другие настройки переменных среды не ~/.bashrc
распространяются автоматически на ваше cron
задание. Например, нет $DISPLAY
, поэтому программы с графическим интерфейсом пользователя требуют особого обращения (читайте man xhost
).
cron
В crontab
файле Read можно задать переменные окружения для всех своих заданий man 5 crontab
.
Посмотрите на результаты echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
в каждой из ваших сред.
Под «каждым» я подразумеваю cron
и рабочий стол, а «терминал без графического интерфейса» вы можете оставить batch
на потом, если вам интересно.