Ad Widget

Collapse

Исполнение python-скрипта через External check

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • invin
    Junior Member
    • Feb 2017
    • 2

    #1

    Исполнение python-скрипта через External check

    При авторегистрации помещаю хост во временную группу с временным шаблоном. Там всего один Item делающий определенные проверки и далее вызывающий zabbix-cli https://github.com/usit-gd/zabbix-cli c целью помещения хоста в постоянную группу и навешивания постоянных шаблонов.

    Проблема в том, что zabbix-cli отлично отрабатывает при ручном запуске и через крон, но никак не хочет отрабатывать через External check. На выходе ошибка
    Traceback (most recent call last):
    File "/usr/local/bin/zabbix-cli", line 4, in <module>
    __import__('pkg_resources').run_script('zabbix-cli==1.6.1', 'zabbix-cli')
    File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 719, in run_script
    self.require(requires)[0].run_script(script_name, ns)
    File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1511, in run_script
    exec(script_code, namespace, namespace)
    File "/usr/local/lib/python2.7/dist-packages/zabbix_cli-1.6.1-py2.7.egg/EGG-INFO/scripts/zabbix-cli", line 67, in <module>

    File "build/bdist.linux-x86_64/egg/zabbix_cli/config.py", line 50, in __init__
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

    Судя по тому, что в ручном режиме и через крон все работает без ошибок, все зависимости установлены. Проблема где-то в отличии среды выполнения.

    Вопрос, чем выполнение через External check отличается от запуска руками?
  • yukra
    Senior Member
    • Apr 2013
    • 1359

    #2
    Originally posted by invin
    При авторегистрации помещаю хост во временную группу с временным шаблоном. Там всего один Item делающий определенные проверки и далее вызывающий zabbix-cli https://github.com/usit-gd/zabbix-cli c целью помещения хоста в постоянную группу и навешивания постоянных шаблонов.

    Проблема в том, что zabbix-cli отлично отрабатывает при ручном запуске и через крон, но никак не хочет отрабатывать через External check. На выходе ошибка
    Traceback (most recent call last):
    File "/usr/local/bin/zabbix-cli", line 4, in <module>
    __import__('pkg_resources').run_script('zabbix-cli==1.6.1', 'zabbix-cli')
    File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 719, in run_script
    self.require(requires)[0].run_script(script_name, ns)
    File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1511, in run_script
    exec(script_code, namespace, namespace)
    File "/usr/local/lib/python2.7/dist-packages/zabbix_cli-1.6.1-py2.7.egg/EGG-INFO/scripts/zabbix-cli", line 67, in <module>

    File "build/bdist.linux-x86_64/egg/zabbix_cli/config.py", line 50, in __init__
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

    Судя по тому, что в ручном режиме и через крон все работает без ошибок, все зависимости установлены. Проблема где-то в отличии среды выполнения.

    Вопрос, чем выполнение через External check отличается от запуска руками?
    Скрипт не смотрел, но на вскидку могу предположить что вы скрипт запускаете из bash (zsh?), а external check - через sh.
    Запустите через external check скрипт вида 'env > /tmp/external.log' и сравните вывод с запуском обычного env под пользователем zabbix.

    Кстати еще 1 идея (напоминаю что скрипт не смотрел): некоторые скрипты создают какие-либо временные файлы по постоянному пути, вы запустили скрипт от рута, потом он же запускается от пользователя zabbix и ему не хватает прав на временные файлы, ибо они были созданы с рутовыми правами.

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Вероятнее всего, отличия в переменных окружения - PATH, HOME, PYTHONSTARTUP и т.п. Смотреть - как сказал yukra.

      Comment

      Working...