Crontab с прокси

Вопрос или проблема

У меня проблема:
Я добавил следующее в /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 с использованием прокси. Убедитесь, что вы тщательно проверяете логи, контролируете переменные окружения и корректно настраиваете права доступа. Если у вас возникают ошибки, анализируя логи, вы будете на правильном пути к их устранению.

Оцените материал
Добавить комментарий

Капча загружается...