Не могу заставить службу systemd запускать программу Python ⇐ Python
Не могу заставить службу systemd запускать программу Python
Я пытаюсь запустить довольно простую программу Python при запуске и заставить ее перезапуститься самостоятельно.
Программа Python работает нормально с терминала. Служба просто выдает мне сообщение об ошибке.
sudo systemctl status logger_autostart.service logger_autostart.service — Регистрация силы сигнала Rockblock Iridium Загружено: загружено (/etc/systemd/system/logger_autostart.service; включено; предустановка поставщика: включено) Активно: сбой (Результат: код выхода) с четверга 07.12.2023, 07:55:57 CET; 1 секунду назад Процесс: 3340 ExecStart=/usr/bin/python3/home/pi/Downloads/signal_test.py (код=выход, статус=1/FAILURE) Основной PID: 3340 (код=выход, статус=1/ОТКАЗ) Процессор: 204 мс 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: запланированное задание перезапуска, счетчик перезапуска равен 5. 7 декабря, 07:55:57 raspberrypi systemd [1]: прекращена регистрация силы сигнала Rockblock Iridium. 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: Запрос на запуск повторяется слишком быстро. 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: Ошибка с результатом «код выхода». 7 декабря, 07:55:57 raspberrypi systemd [1]: не удалось запустить регистрацию силы сигнала Rockblock Iridium. мой служебный файл:
[Единица измерения] Описание=Регистрация мощности сигнала каменной глыбы иридия After=multi-user.target [Услуга] Тип=простой Пользователь=пи ExecStart=/usr/bin/python3/home/pi/Downloads/signal_test.py Перезапустить=всегда StandardOutput=системный журнал Стандартная ошибка = системный журнал SyslogIdentifier=%n [Установить] WantedBy=multi-user.target Не могу увидеть журналы ошибок, если использую: journalctl -f -u echo-logger_autostart.service
Программа:
время импорта из даты и времени импорта даты и времени импортировать RPi.GPIO как GPIO время импорта импортный серийный номер из adafruit_rockblock импортировать RockBlock журнал импорта импортировать случайный импортировать ОС из потока импорта событий # Контакты GPIO для светодиодов led_pins = [17, #green (нет подключения) 27, #желтый (плохое соединение) 22, #красный (хорошая связь) 23] #blue (во время запуска / для ) # контакт GPIO для кнопки button_pin = 18 цикл_актив = Ложь защита Board_Setup(): # Установите режим GPIO и предупреждения GPIO.setmode(GPIO.BCM) GPIO.setwarnings(ложь) # Настройте контакты светодиода как выход для вывода вled_pins: GPIO.setup(контакт, GPIO.OUT) GPIO.выход(контакт, GPIO.LOW) # Вывод кнопки настройки как вход с подтягивающим резистором GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) def rockblock_setup() -> RockBlock: uart = серийный.Serial("/dev/ttyUSB0", 19200) вернуть RockBlock (uart) защита all_leds_off(): для вывода вled_pins: GPIO.выход(контакт, GPIO.LOW) защита red_led_on(): GPIO.output(led_pins[2], GPIO.HIGH) защита Yellow_led_on(): GPIO.output(led_pins[1], GPIO.HIGH) защита green_led_on(): GPIO.output(led_pins[0], GPIO.HIGH) защита toggle_blue_led(): состояние = GPIO.input(led_pins[3]) если состояние == GPIO.HIGH: GPIO.output(led_pins[3], GPIO.LOW) еще: GPIO.output(led_pins[3], GPIO.HIGH) защита button_pressed_callback (канал): глобальный цикл_активный циклический_активный = не циклический_активный защита create_log_file(): # Создать файл журнала, используя текущее время в формате Г-М-Д если нет os.path.exists("logs/"): os.madeirs("журналы/") current_datetime = datetime.now() timestamp = current_datetime.strftime("%Y-%m-%d") имя_файла_журнала = f"log_{метка времени}.txt" logging.basicConfig( уровень = logging.INFO, format="%(asctime)s %(сообщение)s", datefmt="%H:%M:%S", имя_файла = "logs/" + имя_файла_журнала ) защита run_logger(): # регистрируем уровень сигнала каждые 10 секунд глобальный цикл_активный create_log_file() рб = rockblock_setup() #ждём пока кнопка не будет нажата GPIO.add_event_detect(button_pin, GPIO.BOTH, обратный вызов=button_pressed_callback) print("используйте переключатель, чтобы начать регистрацию") пока не циклический_активный: проходить print("Запись началась") пока цикл_активен: качество = rb.signal_quality # случайное целое число, пока антенна исправлена # качество = random.randint(0,5) logging.info(качество) качество печати) если качество == 0: all_leds_off() red_led_on() качество elif
Я пытаюсь запустить довольно простую программу Python при запуске и заставить ее перезапуститься самостоятельно.
Программа Python работает нормально с терминала. Служба просто выдает мне сообщение об ошибке.
sudo systemctl status logger_autostart.service logger_autostart.service — Регистрация силы сигнала Rockblock Iridium Загружено: загружено (/etc/systemd/system/logger_autostart.service; включено; предустановка поставщика: включено) Активно: сбой (Результат: код выхода) с четверга 07.12.2023, 07:55:57 CET; 1 секунду назад Процесс: 3340 ExecStart=/usr/bin/python3/home/pi/Downloads/signal_test.py (код=выход, статус=1/FAILURE) Основной PID: 3340 (код=выход, статус=1/ОТКАЗ) Процессор: 204 мс 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: запланированное задание перезапуска, счетчик перезапуска равен 5. 7 декабря, 07:55:57 raspberrypi systemd [1]: прекращена регистрация силы сигнала Rockblock Iridium. 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: Запрос на запуск повторяется слишком быстро. 7 декабря, 07:55:57 raspberrypi systemd[1]: logger_autostart.service: Ошибка с результатом «код выхода». 7 декабря, 07:55:57 raspberrypi systemd [1]: не удалось запустить регистрацию силы сигнала Rockblock Iridium. мой служебный файл:
[Единица измерения] Описание=Регистрация мощности сигнала каменной глыбы иридия After=multi-user.target [Услуга] Тип=простой Пользователь=пи ExecStart=/usr/bin/python3/home/pi/Downloads/signal_test.py Перезапустить=всегда StandardOutput=системный журнал Стандартная ошибка = системный журнал SyslogIdentifier=%n [Установить] WantedBy=multi-user.target Не могу увидеть журналы ошибок, если использую: journalctl -f -u echo-logger_autostart.service
Программа:
время импорта из даты и времени импорта даты и времени импортировать RPi.GPIO как GPIO время импорта импортный серийный номер из adafruit_rockblock импортировать RockBlock журнал импорта импортировать случайный импортировать ОС из потока импорта событий # Контакты GPIO для светодиодов led_pins = [17, #green (нет подключения) 27, #желтый (плохое соединение) 22, #красный (хорошая связь) 23] #blue (во время запуска / для ) # контакт GPIO для кнопки button_pin = 18 цикл_актив = Ложь защита Board_Setup(): # Установите режим GPIO и предупреждения GPIO.setmode(GPIO.BCM) GPIO.setwarnings(ложь) # Настройте контакты светодиода как выход для вывода вled_pins: GPIO.setup(контакт, GPIO.OUT) GPIO.выход(контакт, GPIO.LOW) # Вывод кнопки настройки как вход с подтягивающим резистором GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) def rockblock_setup() -> RockBlock: uart = серийный.Serial("/dev/ttyUSB0", 19200) вернуть RockBlock (uart) защита all_leds_off(): для вывода вled_pins: GPIO.выход(контакт, GPIO.LOW) защита red_led_on(): GPIO.output(led_pins[2], GPIO.HIGH) защита Yellow_led_on(): GPIO.output(led_pins[1], GPIO.HIGH) защита green_led_on(): GPIO.output(led_pins[0], GPIO.HIGH) защита toggle_blue_led(): состояние = GPIO.input(led_pins[3]) если состояние == GPIO.HIGH: GPIO.output(led_pins[3], GPIO.LOW) еще: GPIO.output(led_pins[3], GPIO.HIGH) защита button_pressed_callback (канал): глобальный цикл_активный циклический_активный = не циклический_активный защита create_log_file(): # Создать файл журнала, используя текущее время в формате Г-М-Д если нет os.path.exists("logs/"): os.madeirs("журналы/") current_datetime = datetime.now() timestamp = current_datetime.strftime("%Y-%m-%d") имя_файла_журнала = f"log_{метка времени}.txt" logging.basicConfig( уровень = logging.INFO, format="%(asctime)s %(сообщение)s", datefmt="%H:%M:%S", имя_файла = "logs/" + имя_файла_журнала ) защита run_logger(): # регистрируем уровень сигнала каждые 10 секунд глобальный цикл_активный create_log_file() рб = rockblock_setup() #ждём пока кнопка не будет нажата GPIO.add_event_detect(button_pin, GPIO.BOTH, обратный вызов=button_pressed_callback) print("используйте переключатель, чтобы начать регистрацию") пока не циклический_активный: проходить print("Запись началась") пока цикл_активен: качество = rb.signal_quality # случайное целое число, пока антенна исправлена # качество = random.randint(0,5) logging.info(качество) качество печати) если качество == 0: all_leds_off() red_led_on() качество elif
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Systemd пытается запустить мою службу через 5 минут, хотя это не удалось
Anonymous » » в форуме Linux - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-