首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在其他服务器上运行脚本

在其他服务器上运行脚本
EN

Stack Overflow用户
提问于 2018-10-06 10:19:30
回答 3查看 1.5K关注 0票数 2

我有2个网站,托管在2个不同的服务器。它们是相互关联的。有时我只是在Website-1上做一些事情,然后在Website-2上运行一个脚本。比如我在Website-1上编辑了一些东西,现在我想在Website-2上运行一个脚本,以便在它的服务器上进行相应的更新。

到目前为止,我在网站1上使用了以下代码。

代码语言:javascript
复制
$file = file_get_contents('Website-2/update.php');

但这样做的问题是我的网站服务器脚本停止运行,并等待文件返回一些数据。我不想用这些数据做任何事。我只想运行脚本。

有没有办法让我用更好的方式来做这件事,或者告诉PHP转到下一行代码。

EN

回答 3

Stack Overflow用户

发布于 2018-10-06 11:18:19

代码语言:javascript
复制
If you want to call the second site without making your user wait for a response,
I would recommend using a message queue.
Site 1 request would put a message to the queue.
Cron job to check queue and run update on site 2 when message exists.

Common queues apps to look at:  
[https://aws.amazon.com/sqs/?nc2=h_m1][1]  
[https://beanstalkd.github.io/][2]  
[https://www.iron.io/mq][3]


  [1]: https://aws.amazon.com/sqs/?nc2=h_m1
  [2]: https://beanstalkd.github.io/
  [3]: https://www.iron.io/mq
票数 0
EN

Stack Overflow用户

发布于 2018-10-06 11:32:26

你想要实现的东西被称为web钩子,应该通过适当的身份验证来实现,这样任何人都不会在任何时候执行你的脚本并使你的服务器超载。

在服务器2上,您需要通过工作线程、线程、消息队列或类似的方式异步执行脚本。

你也可以在你的服务器1上运行异步命令,有很多方法可以做到这一点。这里有一些关于这方面的更多链接。

(Async curl request in PHP)

(https://segment.com/blog/how-to-make-async-requests-in-php/)

票数 0
EN

Stack Overflow用户

发布于 2018-10-06 13:37:20

像往常一样呼叫远程服务器。但是,在您通常调用的PHP脚本中,将所有功能放入第三个脚本中。然后在旧脚本中使用(在Linux上)调用新脚本

代码语言:javascript
复制
exec('php -f "{path to new script}.php" $args  > /dev/null &');

末尾的&使这成为一个后台或非阻塞调用。因为您是从远程服务器调用它,所以不需要更改调用服务器上的任何内容。php -f运行一个php文件。> /dev/null将该文件的输出发送到垃圾桶。

在windows上,您可以使用COM和WScript.Shell来做同样的事情

代码语言:javascript
复制
$WshShell = new \COM('WScript.Shell');
$oExec = $WshShell->Run('cmd /C php {path to new script}.php', 0, false);

您可能希望在文件名和提供的任何参数上使用escapeshellarg

所以它看起来就像这样

  • Server1调用被调用的Server2
  • Script (在Server2上),运行exec并启动后台作业(Server2),然后exits
  • Server1继续,normal
  • Server2继续后台进程

因此,使用您的示例而不是调用:

代码语言:javascript
复制
file_get_contents('Website-2/update.php');

你会打电话给

代码语言:javascript
复制
file_get_contents('Website-2/update_kickstart.php');

update_kickstart.php中放入以下代码

代码语言:javascript
复制
<?php
 exec('php -f "{path}update.php" > /dev/null &');

它将update.php作为单独的后台(非阻塞)调用运行。因为它是非阻塞的,所以update_kickstart.php将完成并返回给searver1,它可以处理自己的事务,而update.php将在server2上独立运行

很简单..。

最后一点是,file_get_contents是一个糟糕的选择。我将使用SSH和可能的PHPSecLib2.0连接到server2,并以只能访问该文件(Chroot it或类似文件)的用户直接运行exec命令。实际上,任何人都可以调用该文件并运行它。由于它位于SSH登录之后,它是受保护的,使用它Chrooted,“特殊”用户只能运行该文件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52675164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档