无法使用 Crontab 运行第二个 py 脚本 @reboot - Ubuntu 20.04



在我的raspberry pi设备上安装ubuntu 20.04,当我在重启设备后手动运行start.py代码时目录/home/okay

python3 start.py

两个脚本一个接一个地运行。但是当我在crontab中输入@reboot时,

@reboot sleep 300 && python3 /home/okay/start.py

只运行第一个脚本,第二个脚本不运行。

py脚本在

下面
import os
os.system ("python3 /home/okay/avadot.py & ")
os.system ("python3 /home/okay/main.py &")

我用os写代码的原因。True:每10分钟循环一次。因此,不可能在一个完成后启动另一个,两者必须同时开始工作。

cron任务中使用Python似乎没有多大意义。

os.system("cmd &")将运行cmd作为它生成的shell的后台任务,但是shell将一直挂在那里直到后台任务完成。您可以通过各种方式分离,但最简单的解决方案是在同一个shell中运行两个作业,并且根本不使用Python。

#!/bin/sh
python3 /home/okay/avadot.py &
python3 /home/okay/main.py &

如果你非常想多花一个进程,你可以从Python中运行:

import subprocess
subprocess.run("""
python3 /home/okay/avadot.py &
python3 /home/okay/main.py &
""", shell=True, check=True)

或重构您的代码,以便您可以import这两个脚本并使用multiprocessing运行它们。

回到更简单的建议,您可以从一个cron作业启动两个进程

@reboot sleep 300 && python3 /home/okay/avadot.py & python3 /home/okay/main.py &

但是cron已经在后台运行了,所以你可以把它分割成

@reboot sleep 300 && python3 /home/okay/avadot.py
@reboot sleep 300 && python3 /home/okay/main.py

可能有其他并发症;一个常见的初学者难题是试图运行需要图形显示或用户交互的工具,当然cron根本不提供这些工具。有关更多信息和故障排除提示,请参阅CronJob未运行。

首先是cron需要你想要使用的可执行文件的完整路径。

你可以通过command -v <cmd>找到它们。

我猜你在找类似

的东西
@reboot /usr/bin/sleep 300 && /usr/bin/python3 /home/okay/start.py

然后,您编写的脚本运行子进程。如果您查看os.system()的文档,您可以阅读:

subprocess模块为生成新进程和检索其结果提供了更强大的功能;使用那个模块比使用这个函数更可取。请参阅subprocess文档中的"用子进程模块替换旧函数"一节,以获得一些有用的方法。

所以你应该这样做:

import subprocess
subprocess.Popen(["python3", "/home/okay/avadot.py"])
subprocess.Popen(["python3", "/home/okay/main.py"])

这将启动两个进程,但请注意,启动进程而不计划其终止是一个坏主意(参见Popen.wait()Popen.poll())。

相关内容

  • 没有找到相关文章

最新更新