使用 crontab 执行程序

Program execution with crontab

硬件设置(电脑等)

Python版本

Python 节目描述

当程序开始创建一些线程时:

  1. 为 Modbus 服务器创建一个线程。
  2. 运行每个串口连接1个线程(/dev/ttyUSBn)并开始读取数据。

问题解释

当我 运行 使用 普通命令 (python2.7 myProgram.py) 的脚本工作时,modbus 服务器启动,我可以读取值,我还可以看到 usb-serial convert 在 TX-RX LED 上闪烁。 如果我检查读取的数据,它们是正确的,那么程序运行正常。

当我设置一个 运行 我的 python 脚本的 crontab 作业时,问题就出现了!

modbus 服务器正常启动,但我看不到 usb-serial 转换器 LED 闪烁,python 程序不打印读取的数据。这意味着该程序无法在 "serial" 端运行。

为了创建作业,我使用了以下命令:

  1. crontab -e
  2. 已选择纳米(默认选项)
  3. 在文件末尾添加了 cron 命令:@reboot /usr/bin/python2.7 /myProgram.py

我无法弄清楚问题出在哪里,程序没有捕捉到异常并且进程仍在 运行ning 直到我手动停止它。如果我停止它并 运行 之后手动启动它并正常工作。

帮你:

我也试过运行用**systemctl**,问题是一样的。 启动时服务启动,如果我检查它,我可以读取:Active(running),但软件没有从串行端口读取。

问题是:

我对此很困惑,我希望问题的创建和格式正确。


编辑 2018 年 11 月 30 日:


我删除了 crontab 命令,并使用 this 过程为 运行 程序创建了一个服务。

如果我 运行 命令:service supervision start 我可以看到进程 运行 正确并且 htop 我只有 4 个进程。

在这种情况下,程序没有从串口读取,但modbus服务器正在工作。你可以看到我只有 4 个进程,cpu 负载太高了。

如果我运行手动使用命令:python2.7 LibSupervisione.py

htop 命令的输出是:

在这里你可以看到我有更多的进程,我创建的每个线程 1 个,cpu 上的负载被正确分配。

如果您可以 运行 您的代码使用这样的服务:sudo service <service-name> start 并使用 sudo service <serivice-name> status 获得良好状态,您可以像这样在 crontab -e 中测试它(运行 每 5 分钟进行一次测试):

*/5 * * * * service <service-name> start
*/10 * * * * service <service-name> stop

然后在上面的测试之后使用@rebote


或:

最后,如果您想在系统启动时 运行 您的 code/service,请执行此操作而不是 cron jon:

使用具有sudo权限的编辑器编辑rc.local文件,然后:

#!/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

[注意]:

This is the procedure 从您的代码创建 service

您的脚本可能需要控制台或一些环境变量,但在 systemd 启动的进程中您不会自动拥有这些。

最简单的方法是在 ExecStart 字段中的系统单元中添加 /usr/bin/bash -c "your command" 以启用 Shell 像这样的环境:

ExecStart=/bin/bash -c "/usr/bin/python2.7 /myProgram.py" 

WorkingDirectory=yourWorkingDir 

为什么需要使用cron?请改用 systemd 计时器。