【问题标题】:How to keep run Python Program in Background on Raspberry Pi after terminate ssh终止 ssh 后如何在树莓派的后台继续运行 Python 程序
【发布时间】:2014-11-25 06:57:39
【问题描述】:


关闭 ssh 连接后,我需要在我的 Raspberry Pi 上继续在后台运行我的 Python 程序,因为我需要将 Phidg​​et 信息保存在 SQL DB 上
我尝试使用 nohup 执行此操作,但似乎 python 程序甚至没有执行。

因为当我查看 MySql DB 时,在下面做之后没有插入任何内容。

我输入:

    pi@raspi ~/MyProjekt $ sudo nohup python sensorReader.py &
    [1] 8580

当我尝试查看此过程是否存在时:

ps -A| grep 8580

它什么也不返回。
那我有什么问题吗?
关闭SSH连接后如何运行python程序

【问题讨论】:

    标签: python mysql linux ssh raspberry-pi


    【解决方案1】:

    我建议在 cron 重启作业中运行你的 python 程序。

    要编辑您的根 cronjobs,请使用

    sudo crontab -e
    

    并添加行

    @reboot sudo python full_path/MyProjekt/sensorReader.py
    

    然后重启你的 pi:

    sudo reboot
    

    然后确认你的进程正在运行:

    ps -aux | grep python
    

    【讨论】:

    • 这个想法很好,但实际上并不奏效。该进程似乎正在运行,但程序不会将传感器信息写入 SQL DB。有什么想法吗?
    • 您应该在您的 python 脚本中设置日志记录,以便您可以跟踪它在做什么,因为您无权访问控制台输出。您可以通过附加 2>&1 >> /tmp/mylogfile.log 将 stdout 和 stderr 从您的 cron 作业中通过管道传输到文件,然后查看是否得到了一些东西。
    【解决方案2】:

    我不认为这是一个 ssh 连接问题,从你所说的程序似乎执行并退出。您的 .py 是否在无限循环中执行?否则你不应该期望它活着。

    然后,关于在父进程终止后保持进程存活(在您的情况下为 shell),nohup 是答案,这意味着忽略 HUP 信号(由终止父进程发送的信号)。

    “&”只是表示“在后台执行”。

    如果您的程序打算定期执行某些操作,则 cron 解决方案很好,但如果它应该保持活动状态等待某些事件(例如侦听套接字),我更愿意创建一个 init scritp,以便程序是在启动时作为恶魔运行,并且仅在所需的运行级别中运行。

    【讨论】:

    • 我的 python 程序没有循环。它正在等待 Phidg​​et 传感器值,并将此信息保存在同一 Raspberry 上的 MySQL Db 中。
    • 好的,在这种情况下,cron 作业可能是最好的(也是最简单的)解决方案(请参阅 Nonnib 答案),但是当您 ps aux 时,您不应该期望看到您的进程 pid,因为它执行起来似乎非常快,而且它不会一直执行,它会定期生成。
    • 我已经解决了我的 Screen 问题。只需使用 screen -S sessionXX 启动一个新会话,然后使用 ctr+a => d 分离会话,我就可以终止 SSH 连接。但是我仍然需要 crontab 来完成一些工作。 Thatswhy thx Marco 和你的最佳答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2019-08-05
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多