URLLib.Request, возвращающий тайм-аут соединения при выполнении с помощью cron (CentOS) - PullRequest
0 голосов
/ 22 марта 2020

У меня есть Python скрипт, который я хочу выполнять ежедневно с помощью cron. Единственный сценарий, в котором у меня есть проблемы, это тот, который использует запрос URLLib, там я получаю сообщение об ошибке тайм-аута соединения:

Трассировка (последний последний вызов):

  File "/usr/lib64/python3.6/urllib/request.py", line 1318, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/usr/lib64/python3.6/http/client.py", line 1254, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib64/python3.6/http/client.py", line 1300, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.6/http/client.py", line 1249, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.6/http/client.py", line 1036, in _send_output
    self.send(msg)
  File "/usr/lib64/python3.6/http/client.py", line 974, in send
    self.connect()
  File "/usr/lib64/python3.6/http/client.py", line 1407, in connect
    super().connect()
  File "/usr/lib64/python3.6/http/client.py", line 946, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib64/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/lib64/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

This такое выполнение cron:

0 3 * * * /usr/bin/python3.6 "/home/ngabioud/Scripts Python VM/ClickTableau.py"

У вас есть идеи, почему это не работает? Сценарий работает нормально, если я запускаю его вручную в командной строке.

Спасибо!

1 Ответ

0 голосов
/ 24 марта 2020

Похоже, проблема исходит от прокси.

Используя в качестве примера ответ здесь ,

Получается, что мне пришлось установить параметры прокси, поэтому я получаю доступ к AWS как к себе, а не root. Я запустил задание cron как Linux сценарий оболочки, а не Python сценарий, и экспортировал мои настройки http_proxy, https_proxy и no_proxy, найденные в ~ / .bash_profile, в первых строках сценария оболочки

`export http_proxy=<http_proxy from ~/.bash_profile>
 export https_proxy=<https_proxy from ~/.bash_profile>
 export no_proxy=<no_proxy from ~./bash_profile>
 python <python script>`

Если вы все еще не можете отсортировать его, укажите, где вы размещаете задание cron, а также вывод шага, приведенного ниже.

Рассмотрите возможность ведения журнала cron-job stdout и stderr. Это помогает намного больше, чем трассировка ошибок python.

18 20 * * * python2.6 script.py > /test.log 2>/test.err &

также проверяет / var / log / messages на наличие любой информации.

Наконец, почему бы не попробовать вместо сельдерея Крона? см здесь

...