Вопрос или проблема
У меня проблема:
Я добавил следующее в /etc/profile.d/proxy:
export http_proxy=http://IP:80/
export https_proxy=http://IP:80/
export ftp_proxy=http://IP:80/
export no_proxy=”localhost,127.0.0.1,localaddress,.domain.com”
export HTTP_PROXY=http://IP:80/
export HTTPS_PROXY=http://IP:80/
export FTP_PROXY=http://IP:80/
export NO_PROXY=”localhost,127.0.0.1,localaddress,.domain.com”
Запустите source /etc/profile.d/proxy.sh
После этого:
- запустите скрипт с /usr/bin/php /var/cron/script.php : отлично 🙂
- добавьте в crontab -e : sudo /usr/bin/php /var/cron/supervision.php : ничего 🙁
Согласно как добавить http_proxy автоматически новым пользователям на сервере ubuntu, этого должно быть достаточно. У него было chmod 755 (root:root).
Мой cron, как root, просто отказывается это использовать.
Ответ или решение
Для решения проблемы с использованием прокси в задачах cron, рассмотрим несколько важных шагов и аспектов настройки окружения, которые могут быть причиной неудачи выполнения скрипта через cron. Прежде всего обратим внимание на то, что команды, выполняемые в cron, работают в ограниченном окружении, и поэтому могут не иметь доступ к переменным окружения, установленным в файле /etc/profile.d/proxy
.
1. Настройка переменных окружения
Когда вы добавляете переменные окружения в /etc/profile.d/proxy
, они будут доступны только в интерактивных оболочках. Так как cron запускает команды в неброском окружении, вам необходимо вручную настроить эти переменные в вашей crontab или в самом скрипте.
Пример переменных в crontab
* * * * * export http_proxy=http://IP:80/ && export https_proxy=http://IP:80/ && /usr/bin/php /var/cron/supervision.php
Однако, это может сделать ваш crontab менее читаемым. Лучше будет добавить переменные прокси непосредственно в ваш скрипт supervision.php
.
2. Включение настроек в скрипт
Добавьте следующие строки в начало файла /var/cron/supervision.php
:
putenv('http_proxy=http://IP:80/');
putenv('https_proxy=http://IP:80/');
putenv('ftp_proxy=http://IP:80/');
putenv('no_proxy=localhost,127.0.0.1,localaddress,.domain.com');
3. Проверка выполнения
После внесения изменений, убедитесь, что ваш cron-задание по-прежнему настроено и активировано:
crontab -e
И убедитесь, что запись выглядит корректно, например:
* * * * * /usr/bin/php /var/cron/supervision.php
4. Логирование и отладка
Чтобы выяснить причину, по которой задача не выполняется, вы можете перенаправить стандартный вывод и ошибки вашего cron-задания в файл. Например:
* * * * * /usr/bin/php /var/cron/supervision.php >> /tmp/supervision.log 2>&1
Таким образом, все ошибки и вывод скрипта будут записываться в файл supervision.log
, что упростит диагностику.
5. Проверка прав доступа
Убедитесь, что ваш скрипт имеет корректные права доступа. Вы уже упомянули, что файл имеет права 755
. Убедитесь, что пользователь, от имени которого выполняется cron (обычно это root), имеет необходимые права на выполнение скрипта.
ls -l /var/cron/supervision.php
6. Альтернативные способы
Если проблема сохраняется, вы можете рассмотреть использование утилиты curl
или wget
напрямую внутри cron для тестирования прокси:
* * * * * /usr/bin/curl -I --proxy http://IP:80/ http://yourtarget.domain
Это поможет убедиться, что прокси работает как ожидалось.
Заключение
С учетом вышеизложенных шагов, теперь вы должны иметь возможность настроить выполнение скрипта через cron с использованием прокси. Убедитесь, что вы тщательно проверяете логи, контролируете переменные окружения и корректно настраиваете права доступа. Если у вас возникают ошибки, анализируя логи, вы будете на правильном пути к их устранению.