Настройка оборудования (компьютер и т. Д.)
- Сервер Ubuntu 18.04.1
- Преобразователь последовательного интерфейса в USB с 8 портами
Версия Python
Описание программы Python
При запуске программыЧтобы создать несколько потоков:
- Создайте один поток для сервера Modbus.
- Запустите 1 поток для каждого подключенного последовательного порта (
/dev/ttyUSBn
) и начните чтение данных.
Объяснение проблемы
Когда я запускаю сценарий с помощью обычной команды (python2.7 myProgram.py
), он работает, поэтому сервер Modbus запускается, и я могу прочитать значение, иЯ также вижу мигание usb-serial конвертера на светодиодах TX-RX .Если я проверю прочитанные данные, они верны, поэтому программа работает правильно.
Проблема возникает, когда я настраиваю задание crontab, которое запускает мой скрипт python!
Запуск сервера Modbusправильно, но я не вижу, чтобы светодиоды USB-последовательного конвертера мигали, а программа python не печатает прочитанные данные.Это означает, что программа не работает на «последовательной» стороне.
Для создания задания я использовал следующие команды:
crontab -e
- выбранnano (опция по умолчанию)
- В конце файла добавлена команда cron:
@reboot /usr/bin/python2.7 /myProgram.py
Не могу понять, в чем проблема, программа не перехватываетисключение, и процесс все еще выполняется, пока я не остановлю его вручную.Если я остановлю его и запустите вручную, после этого он запустится и будет работать правильно.
В помощь вам:
У меня также естьпопытался запустить его с помощью **systemctl**
, проблема та же.При загрузке служба запускается, и если я проверяю ее, я могу прочитать: Active(running)
, но программное обеспечение не читает с последовательного порта.
Вопросы:
- Как я могу это решить?
- Что-то не так с заданием crontab?
- Возможно, задание crontab не может получить доступкаталог / dev /?Как я могу решить это?
Я очень смущен этим, я надеюсь, что вопрос правильно создан и отформатирован.
РЕДАКТИРОВАТЬ 30/11 /18:
Я удалил команду crontab и создал службу для запуска программы, используя эту процедуру.
Если я запускаю команду: service supervision start
Я вижу, что процесс работает правильно и на htop
У меня только 4 процесса.
![htop output](https://i.stack.imgur.com/Pfm7u.png)
![service status output](https://i.stack.imgur.com/Yk0Se.png)
В этом случае программа не читает с последовательного порта, но сервер Modbus работает.Вы можете видеть, что у меня всего 4 процесса и загрузка процессора слишком высока.
Если я запускаю его вручную с помощью команды: python2.7 LibSupervisione.py
Вывод команды htop
: ![outupt of working program](https://i.stack.imgur.com/65fO9.png)
Здесь вы видите, что у меня есть больше процессов, по 1 для каждого создаваемого потока, и нагрузка на процессор распределяется правильно.