При запуске скрипта на python стандартный ввод равен None. sys.stdin = None

Есть простой скрипт на питоне, который запускается через zabbix типом External check. Операционная система Oracle linux

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import daemon
import sys
from traceback import format_exc


def run_main_function():
    print("Hello")

try:
    with daemon.DaemonContext():
        run_main_function()
except:
    print(sys.stdin)
    print(format_exc())
None
Traceback (most recent call last):
  File "/usr/lib/zabbix/externalscripts/logstash_stats.py", line 18, in <module>
    with daemon.DaemonContext():
  File "/usr/local/lib/python3.9/site-packages/daemon/daemon.py", line 249, in __init__
    detach_process = is_detach_process_context_required()
  File "/usr/local/lib/python3.9/site-packages/daemon/daemon.py", line 817, in is_detach_process_context_required
    if is_process_started_by_init() or is_process_started_by_superserver():
  File "/usr/local/lib/python3.9/site-packages/daemon/daemon.py", line 795, in is_process_started_by_superserver
    if is_socket_file(sys.__stdin__):
  File "/usr/local/lib/python3.9/site-packages/daemon/daemon.py", line 759, in is_socket_file
    file_fd = file.fileno()
AttributeError: 'NoneType' object has no attribute 'fileno'

Сначало я грешил на библиотеку daemon. Но, если запустить скрипт ниже, то увидим, что sys.stdin = None. А библиотеке daemon нужен корректный stdin, который создаётся при запуске скрипта.

import sys

print(sys.stdin) 

return:

None

Права скрипту выданы, но не понятно почему с вероятностью 20% скрипт выдаёт ошибку, а остальные 80% отрабатывает успешно.

chown zabbix:zabbix /path/script
chmod 0777 /path/scrypt

Подскажите, в чем может быть проблема и как её побороть?


Ответы (0 шт):