Безголовый скрипт Python требует запуска x-server - PullRequest
0 голосов
/ 24 апреля 2018

Я создал скрипт без языка в Python для предварительной обработки изображений Sentinel и вывода NDVI link . Сценарий выполняется на удаленном сервере (контейнер Linux), к которому я получаю доступ через SSH-соединение. Скрипт запускается без ошибок, когда я запускаю его из терминала, используя:

python /home/foo/SentinelPPN.py

Однако происходит сбой при автоматическом запуске через chronejob. вывод: «не удается подключиться к X-серверу». Я не получаю никакого другого сообщения и никаких указаний на то, в какой строке скрипта возникает ошибка

Я не могу точно определить, для какой операции требуется X-сервер, поскольку я вообще не использую графический интерфейс и визуальный вывод не создается во время сценария. Чтобы запустить скрипт как безголовый, я использую следующие настройки:

import sys
import os
import qgis
from qgis.core import *
#from PyQt4.QtGui import *

app = QgsApplication([],True, None)
app.setPrefixPath("/usr", True)
app.initQgis()
sys.path.append('/usr/share/qgis/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()

остальная часть скрипта в основном обрабатывает модули, запущенные с использованием:

processing.runalg("...")

Не могли бы вы помочь мне понять, зачем нужен X-сервер и как этого избежать?

1 Ответ

0 голосов
/ 11 июня 2018

Проблема заключается в том, что cronjob блокирует переменную DISPLAY, препятствуя правильной инициализации qgis / PyQt4. Решение состоит в том, чтобы передать cronjob export переменную DISPLAY:

* * * * * export DISPLAY=:0 && python /home/foo/SentinelPPN.py

Это устанавливает DISPLAY на правильный дисплей (это :0).

(взято из gis.se , потому что мы не можем отметить дубликат ни одного вопроса SO)

...