3

我正在编写一个 Wordpress 插件,它在启动时运行 PHP 脚本,并使用 WebSockets 连续监听事件并记录连接。

例如

shell_exec('php restserver.php >restserver.log 2>&1 &');

提到的脚本在 Wordpress API 之外。我知道使用execorshell_exec是一种极端的方法(通常是一个磨损问题的答案)。

我设法记录了 restserver.php 进程 ID,以便在插件被禁用时能够将其杀死,并且在插件重新启动时不重新启动脚本。

所以简而言之...

  1. 有没有更好的方法来运行独立于 wordpress 的后台 php 进程?
  2. 是否有“最佳实践”方法来检测插件禁用事件并在此之前启动 kill process 命令?

编辑:问题 2 的秘诀显然在于使用register_deactivation_hook()afterregister_activation_hook()来注册你的类或函数,使魔术。

无论如何,它对我有用。任何有关使用exec()正确方法的进一步信息总是受欢迎的。

4

1 回答 1

0

有一个名为GearMan的 unix 服务器,它是为并行执行各种任务而设计的。它有一个 PHP 客户端库,允许您启动工作人员并监控他们的执行,包括后台作业。所以这将是一种(优雅的)方法,但它需要安装 GearMan 服务器和客户端库,这意味着管理访问。

另一种简单的方法是为此添加一个cronjob。这只需要访问写入 cronjob 文件并要求 cronjob 守护程序加载新设置。exec出于您的任务目的从 cronjob 启动 PHP 比从调用中启动它更有意义。

于 2012-08-30T09:17:06.793 回答