在我的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()
)。