【问题标题】:How to execute shell commands on the host machine from code running inside a vm?如何从 vm 中运行的代码在主机上执行 shell 命令?
【发布时间】:2015-08-03 17:39:23
【问题描述】:

我有一个在 mac (OS X 10.10) 上运行的 vagrant vm 中运行的 php 代码库。我正在尝试使用exec() 执行shell 命令。这些命令显然是由 vm shell 执行的,但我希望 mac 的 shell 来运行它。如果可能的话,我怎么能做到这一点?我知道另一种选择是直接在 mac 上运行 php 代码库,但我想知道。

一些相关的附加信息:php 代码库是Laravel 5,vm 是Homestead。我想这样做的原因是从mac的终端调用一个苹果脚本来启动一个特定的软件。

【问题讨论】:

  • VM 中运行的是什么操作系统?
  • 您可以使用任何让一台机器在另一台机器上运行命令的方法,例如ssh。一台机器是虚拟的并托管在另一台机器上并不重要。
  • 您将遇到一些问题,具体取决于 VM 如何从主机获取其网络。例如,如果您的 mac 主机是 192.168.1.112,而您的 VM 是 10.0.1.10,则两个网络将无法相互通信。所以如果你的虚拟机有自己的 IP,比如 192.168.1.113,那么你就可以 ssh 就好了。
  • 如果你有一个共享文件夹,你可以在主机上创建一个 cron 作业来“监听”并从虚拟机运行命令。看我的回答。

标签: php macos shell laravel osx-yosemite


【解决方案1】:

只需在主机和虚拟机之间共享/挂载一个文件夹,然后您就可以在主机上创建一个 cron 作业来读取和运行来自虚拟机的命令。

首先,您将需要在主机上运行的任何命令从 VM 写入文件。然后只需在主机 (Mac) 上创建一个每隔几分钟或几秒钟运行一次的 cron 作业,检查文件以查看是否有任何新命令要运行。主机就像一个侦听器,检查并等待从 VM 中获取任何命令,以便在主机环境中运行。

【讨论】:

  • Cron 作业是缺失的部分!谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2011-10-16
相关资源
最近更新 更多