【问题标题】:How to run a bash file that does not exited when my program ends python如何运行当我的程序结束 python 时不退出的 bash 文件
【发布时间】:2021-07-08 09:08:00
【问题描述】:

我有一个作为 linux 服务的即时 Python 程序。 该服务通过在 ftp 服务器上下载新版本的代码并启动 bash 文件来更新服务来进行自我更新。 在这个文件中,我有一行在使用新的源代码重新创建它之前破坏了当前服务。 我运行这个 bash 脚本:

subprocess.call("sudo bash /home/pi/install.sh",shell=True)

我知道这个“子进程”存在于我的 python 程序中。并且 bash 脚本停止了 linux 服务,所以停止了 python 程序,所以停止了它自己......所以它永远不会结束。

有什么办法可以解决我的问题?

【问题讨论】:

  • 究竟是什么问题/问题?
  • 如何从 python 程序调用 bash 脚本,如果 python 程序终止,该脚本不会终止
  • sudo bash -c nohup /home/pi/install.sh &"怎么样
  • 我得到 nohup : 缺少操作数
  • “作为 linux 服务的实例”是什么意思?它是否由某些操作系统工具(例如 systemd)管理?

标签: python bash subprocess


【解决方案1】:

我认为有几种方法可以做到这一点 - 其中一种是(可能不是最优雅的?)使用python-crontab 使您的 python 调度 bash 脚本的 cron-job。

假设现在是 13:00,并且您希望您的作业运行 - 然后让 python 脚本将 cron-job 安排到 13:05(只是添加一个时间缓冲区)。 然后,您可以在运行 bash-job 后删除您的 cron-job,手动或在您的 bash-script 中实现它(或者让它调用一个使用 python-crontab 的 python 脚本来删除它,这样做相当容易)

【讨论】:

    【解决方案2】:

    不要让脚本停止服务。如果它安装了新版本,只需让它以特定的退出代码退出,然后在 Python 代码中相应地重新启动服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多