【发布时间】:2019-05-01 20:07:31
【问题描述】:
硬件设置(电脑等)
- Ubuntu 服务器 18.04.1
- 8 端口串口转 USB 转换器
Python 版本
- 2.7.15r1
Python程序说明
当程序开始创建一些线程时:
- 为 Modbus 服务器创建一个线程。
- 为每个连接的串口 (
/dev/ttyUSBn) 运行 1 个线程并开始读取数据。
问题说明
当我使用 普通命令 (python2.7 myProgram.py) 运行脚本时,它可以工作,因此 modbus 服务器启动并且我可以读取值,并且我还可以看到 usb- TX-RX LED 上的串行转换闪烁。
如果我检查读取的数据它们是正确的,那么程序运行正常。
当我设置一个运行我的 python 脚本的 crontab 作业时,问题就出现了!
modbus 服务器正常启动,但我看不到 USB 串行转换器的 LED 闪烁,并且 python 程序不打印读取的数据。这意味着该程序无法在“串行”端运行。
为了创建作业,我使用了以下命令:
crontab -e- 已选择 nano(默认选项)
- 在文件末尾添加 cron 命令:
@reboot /usr/bin/python2.7 /myProgram.py
我不知道问题出在哪里,程序没有捕获异常并且进程仍在运行,直到我手动停止它。如果我停止它并在之后手动运行它,它就会启动并正常工作。
为您提供帮助:
我也试过用**systemctl**运行它,问题是一样的。
在启动服务启动时,如果我检查它,我可以读取:Active(running),但软件没有从串行端口读取。
问题是:
- 我该如何解决?
- crontab 作业有问题吗?
- 也许 crontab 作业无法访问 /dev/ 目录?我该如何解决这个问题?
我对此感到非常困惑,我希望问题的创建和格式正确。
编辑 30/11/18:
我已经删除了 crontab 命令,并创建了一个服务来使用this 过程运行程序。
如果我运行命令:service supervision start 我可以看到该进程运行正常,而在htop 上我只有 4 个进程。
在这种情况下,程序没有从串口读取,但 modbus 服务器正在工作。可以看到我只有4个进程,cpu负载太高了。
如果我使用命令手动运行它:python2.7 LibSupervisione.py
在这里你可以看到我有更多的进程,我创建的每个线程都有 1 个,并且 cpu 上的负载得到了适当的分布。
【问题讨论】:
-
更改为
... myProgram.py >>/tmp/myProgram.log 2>&1,获取错误信息并阅读crontab-not-running-my-python-script -
将此
#!/usr/bin/env pythonshebang 添加到您的代码之上,并将chmod 755设置为您的代码,但最好的方法是从您的代码创建一个服务,我使用来自this procedure那个。 -
@stovfl 我尝试在我的 crontab 命令中添加
>>/tmp/myProgram.log 2>&1,但文件中没有打印任何内容。正如我所说的,问题不是 cron 作业没有运行,而是问题在于它运行了,只启动一个程序。无论如何感谢您的帮助! -
@BenyaminJafari 我已尝试使用 systemctl 创建服务,我将尝试使用您的指南!在文件的顶部,我已经拥有
#!/usr/bin/python2.7,并且我已使用以下命令将文件夹的权限更新为 777:chmod 777 /programFolder/ -R -
@CarloZanocco 你能用服务运行你的脚本吗?
标签: python python-2.7 ubuntu cron ubuntu-18.04