gpt4 book ai didi

python - 在后台远程启动 Python 程序

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:57 25 4
gpt4 key购买 nike

我需要时不时地用fabfile远程启动远程盒子里的一些程序,并得到结果。由于程序需要很长时间才能完成,我希望让它在后台运行,所以我不需要等待。所以我尝试 os.fork() 让它工作。问题是,当我 ssh 到远程框,并在那里使用 os.fork() 运行程序时,程序可以在后台正常工作,但是当我尝试使用 fabfile 的运行时,sudo 远程启动程序,os. fork() 无法工作,程序只是静静地死去。所以我切换到 Python-daemon 来守护程序。很长一段时间,它运行良好。但是现在当我开始让我的程序读取一些 Python shelve dicts 时,python-daemon 不能再工作了。似乎如果您使用 python-daemon,则无法正确加载搁置指令,我不知道为什么。除了 os.fork() 和 Python-daemon 之外,任何人都有想法,我还能尝试什么来解决我的问题?

最佳答案

如果我没有正确理解你的问题,我认为你把这个问题搞得太复杂了。 os.fork() 用于多处理,而不是用于在后台运行程序。

为了便于讨论,假设您想运行 program.sh 并收集它发送到标准输出的内容。要使用 fabric 执行此操作,请在本地创建:

fab文件.py:

from fabric.api import run
def runmyprogram():
run('./program.sh > output 2> /dev/null < /dev/null &')

然后,在本地运行:

fab -H remotebox runmyprogram

程序将远程执行,但 fabric 不会等待它完成。您稍后需要收集输出文件,可能使用 scp。 “&”使它在远程机器的后台运行,输出重定向对于 avoid a hung fabric session 是必要的。 .

如果您不需要使用 fabric,有更简单的方法可以做到这一点。您可以单独 ssh 并运行

nohup ./program.sh > output &

然后稍后回来检查输出。

如果这是您要定期执行的操作,这可能是更好的选择,因为您只需设置一个 cron 作业以每隔一段时间运行一次,然后随时收集输出。

如果您不想稍后收集输出文件,您可以使用:

fab文件.py:

from fabric.api import run
def runmyprogram():
run('./program.sh')

然后,在您的本地机器上:

fab -H remotebox runmyprogram > output &

作业将远程运行,并将所有输出放回本地输出文件。它在您本地计算机的后台运行,因此您可以做其他事情。但是,如果您的本地和远程机器之间的连接可能会中断,最好使用第一种方法,以便输出始终安全地存储在远程机器上。

关于python - 在后台远程启动 Python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com