使用crontab执行程序 硬件设置(计算机等) Ubuntu服务器18.04.1 带有8个端口的串行到Usb转换器 Python版本 2.7.15r1 Python程序描述
当程序开始创建一些线程时:使用crontab执行程序 硬件设置(计算机等) Ubuntu服务器18.04.1 带有8个端口的串行到Usb转换器 Python版本 2.7.15r1 Python程序描述,python,python-2.7,ubuntu,cron,ubuntu-18.04,Python,Python 2.7,Ubuntu,Cron,Ubuntu 18.04,当程序开始创建一些线程时: 为Modbus服务器创建一个线程 为每个连接的串行端口运行1个线程(/dev/ttyUSBn)并开始读取数据 问题解释 当我使用正常命令运行脚本时(python2.7 myProgram.py),脚本工作,因此modbus服务器启动,我可以读取值,我还可以看到TX-RXLED上的usb串行转换闪烁。 如果我检查读取的数据是否正确,那么程序工作正常 当我设置一个运行python脚本的crontab作业时,问题就出现了 modbus服务器正常启动,但我看不到usb串行转换
/dev/ttyUSBn
)并开始读取数据python2.7 myProgram.py
),脚本工作,因此modbus服务器启动,我可以读取值,我还可以看到TX-RXLED上的usb串行转换闪烁。
如果我检查读取的数据是否正确,那么程序工作正常
当我设置一个运行python脚本的crontab作业时,问题就出现了
modbus服务器正常启动,但我看不到usb串行转换器指示灯闪烁,python程序不打印读取的数据。这意味着程序在“串行”端不工作
要创建作业,我使用了以下命令:
crontab-e
@reboot/usr/bin/python2.7/myProgram.py
**systemctl**
运行它,问题也是一样的。
启动时,服务启动,如果我检查它,我可以读取:活动(运行)
,但软件没有从串行端口读取。
问题是:
- 我怎样才能解决它
- crontab作业有问题吗
- 也许crontab作业无法访问/dev/目录?我怎样才能解决这个问题
2018年11月30日编辑:
我已经删除了crontab命令,并创建了一个服务来使用procedure运行程序 如果我运行命令:
service supervision start
我可以看到进程正在正确运行,并且在htop
上我只有4个进程
在这种情况下,程序没有从串行端口读取数据,但modbus服务器正在工作。您可以看到,我只有4个进程,cpu负载太高
如果我使用命令手动运行它:python2.7libsupervisione.py
htop
命令的输出为:
在这里,您可以看到我有更多的进程,我创建的每个线程有一个进程,cpu上的负载是正确分配的。如果您可以像这样使用服务运行代码:
sudo service start
并使用sudo service status
获得良好状态,您可以像这样在crontab-e
中测试它(测试每5分钟运行一次):
[注意]:
您的脚本可能需要一个控制台或一些环境变量,但在systemd启动的过程中,您不会自动拥有这些变量 最简单的方法是在系统单元的
ExecStart
字段中预先添加/usr/bin/bash-c“your command”
,以启用类似Shell的环境,如下所示:
ExecStart=/bin/bash -c "/usr/bin/python2.7 /myProgram.py"
WorkingDirectory=yourWorkingDir
为什么需要使用cron?请改用systemd计时器。更改为
…myProgram.py>/tmp/myProgram.log 2>&1
,以获取错误消息并阅读,在代码顶部添加this#!/usr/bin/env python
shebang,并将chmod 755
设置为代码,但最好的方法是从代码中创建服务为此歌唱。@stovfl我尝试在crontab命令中添加>/tmp/myProgram.log 2>&1
,但在文件中打印的地方没有添加任何内容。正如我所说的,问题不在于cron作业没有运行,而在于它运行,只启动一个程序。无论如何,感谢您的帮助!@BenyaminJafari我尝试创建了使用systemctl的服务,我将尝试使用您的指南!在文件顶部,我已经有了#!/usr/bin/python2.7
,并且我已经使用以下命令将文件夹的权限更新为777:chmod 777/programFolder/-R
@carlozanco您可以使用服务运行脚本吗?问题仍然存在。进程正在正确运行在任何情况下,我总是有一个良好的状态。但问题是程序的工作方式与我手动运行时不同!使用service test start
它运行时,我有一个良好的状态,但串口在任何情况下都没有读取。服务器Modbus工作正常。如果我使用python2.7 myProgram.py手动运行代码
它可以工作并从串行端口读取。我已经为问题添加了更多信息,请检查编辑。我做到了,请添加代码以便更好地理解。我不能添加代码,我可以创建一个示例代码与您共享。但您为什么需要它?代码工作正常,正如我所说的,如果我不是作为服务运行它,那么代码工作正常。不要使用这个,为什么当您可以直接调用时,从系统中rt initd。我不需要使用cron,我已经对它进行了测试,因为系统、systemctl、service和cron命令的问题仍然存在。我创建了一个服务,问题仍然存在。程序启动,但没有从串行端口读取,但modbus服务器正在工作。您是否使用预装Shell?比如bash?我根据自己的经验知道这个问题。这是什么意思?对不起,我不知道预装Shell是什么意思..我使用ssh登录到远程计算机root@ip,之后我使用Ubuntu服务器的外壳你是对的。我明白你的意思!但是我
#!/bin/sh -e
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
service <service-name> start
exit 0
ExecStart=/bin/bash -c "/usr/bin/python2.7 /myProgram.py"
WorkingDirectory=yourWorkingDir