Wakanda Server脚本清理关闭

Kir*_*irk 5 bash shutdown wakanda server

通过OS X shell脚本执行Wakanda服务器的干净关闭的最佳做法是什么?

这将是当前加载和运行的解决方案.

ham*_*hik 6

即将发布的1.1.0版的最佳实践:

  • 处理服务applicationWillStop上的事件以处理特定于应用程序的关闭逻辑
  • service wakanda stop对于Ubuntu和killMac OS 的常规(kill -9在某种超时之后应该永远是最后的手段,但这不再是必要的)

当前版本1.0.x的最佳实践:

  • 使用一种HTTP Request Handler或另一种方法准备服务器停止(确保很好地保护它并仅接受来自localhost的连接)
  • service wakanda stop对于Ubuntu和killMac OS 的常规(kill -9在某种超时之后应该永远是最后的手段,但这不再是必要的)

更多细节 :

我们应该区分像Apache这样的HTTP服务器和像Wakanda Server这样的应用服务器.

例如,当您SharedWorker在Wakanda 中使用a 时,您正在创建一个单独的线程来运行一些代码.假设工作人员正在进行某种关键数据操作.如果您让服务器为您关闭该工作程序,则可能会导致应用程序中的数据不一致.因此,您应该在服务器停止应用程序之前处理任何特定于业务逻辑的"干净"关闭.

从版本1.1.0开始HTTP Request Handler,您可以使用处理事件的服务,而不是创建可以调用以准备服务器停止的特殊内容applicationWillStop.

当服务器收到可阻止的终止信号(TERM,QUIT,INT)时,它将启动停止过程(以下是Wakanda Digital App Factory的1.1.x版本):

  • 通知活动的每项服务 applicationWillStop
  • 通知活动的每项服务 httpServerWillStop
  • 等待所有服务代码执行完成 - 一次调用一个服务(服务器在调用下一个服务之前等待处理事件的代码结束执行) -
  • 拒绝任何新的传入HTTP请求
  • 处理HTTP Server队列中的所有HTTP请求
  • 要求执行JS代码的所有工作者和线程停止执行(包括请求处理程序代码).
  • 检查是否有任何线程/ JS上下文仍处于活动状态,如果是等待最多5秒.
  • 服务器强制所有JavaScript上下文停止执行并杀死所有剩余的线程
  • 服务器等待线程关闭
  • 服务器停止

在1.1.0之前的版本中,服务器要求工作人员在向服务通知关闭事件之前关闭.这就是为什么我们不能依靠服务来干净利落的SharedWorkers.


小智 5

有了使用kill -9的所有建议,请注意kill -9不会轻轻关闭Wakanda服务器.

我们现在使用它已经好几年了,在这种情况下关闭服务器仍会导致数据损坏.特别是当您在后台共享使用数据库的工作人员时.Wakanda没有干净地阻止工人.

我们目前最小化问题的解决方案是:1.向Wakanda发送REST请求以阻止工作人员(您必须为此编写自己的服务器端方法).在所有情况下,这仍然不会关闭进程!2.尝试在不使用-9参数的情况下终止服务器(最多三次)3.如果Wakanda服务器仍处于活动状态,请使用kill -9

顺便说一句.我们很久以前就问过这件事.一些可靠的命令行工具如:rcwakanda启动/停止/重启类似于apache等其他服务会有所帮助.


Tim*_*ner 1

当 Wakanda Server 作为后台进程运行时,您可以使用进程 ID 和kill -sigterm命令干净地停止它。

信号术语

SIGTERM 信号被发送到进程以请求其终止。与 SIGKILL 信号不同,它可以被进程捕获并解释或忽略。这允许进程执行良好的终止,释放资源并在适当的情况下保存状态。SIGINT 与 SIGTERM 几乎相同。

下面是一些示例代码来演示这一点:

ps -A | grep wakanda-server   
kill -SIGTERM pid_from_line_above
Run Code Online (Sandbox Code Playgroud)

注意:您必须将 pid_from_line_above 替换为返回的 PIDps -A | grep wakanda-server


对于你的 bash 脚本,也许这样的东西会起作用:

killall -TERM /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server
sleep 15
killall -KILL /Applications/Wakanda\ Server.app/Contents/MacOS/Wakanda\ Server
Run Code Online (Sandbox Code Playgroud)

该脚本首先向进程发送正常终止信号,然后等待 15 秒,然后向进程发送终止信号以强制其退出。

提醒:kill -SIGKILL PID不能被抓住或忽视。

信号杀死

SIGKILL 信号被发送到进程以使其立即终止(kill)。与 SIGTERM 和 SIGINT 相比,该信号无法被捕获或忽略,并且接收进程在收到该信号后无法执行任何清理。


尽管更好的方法可能是使用 LaunchDaemon,如响应osxstartupitems shell script does not launch application

另请参阅:管理适用于 Unix 的 Wakanda 服务器