即将发布的1.1.0版的最佳实践:
applicationWillStop
上的事件以处理特定于应用程序的关闭逻辑service wakanda stop
对于Ubuntu和kill
Mac OS 的常规(kill -9
在某种超时之后应该永远是最后的手段,但这不再是必要的)当前版本1.0.x的最佳实践:
HTTP Request Handler
或另一种方法准备服务器停止(确保很好地保护它并仅接受来自localhost的连接)service wakanda stop
对于Ubuntu和kill
Mac 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
在1.1.0之前的版本中,服务器要求工作人员在向服务通知关闭事件之前关闭.这就是为什么我们不能依靠服务来干净利落的SharedWorkers
.
小智 5
有了使用kill -9的所有建议,请注意kill -9不会轻轻关闭Wakanda服务器.
我们现在使用它已经好几年了,在这种情况下关闭服务器仍会导致数据损坏.特别是当您在后台共享使用数据库的工作人员时.Wakanda没有干净地阻止工人.
我们目前最小化问题的解决方案是:1.向Wakanda发送REST请求以阻止工作人员(您必须为此编写自己的服务器端方法).在所有情况下,这仍然不会关闭进程!2.尝试在不使用-9参数的情况下终止服务器(最多三次)3.如果Wakanda服务器仍处于活动状态,请使用kill -9
顺便说一句.我们很久以前就问过这件事.一些可靠的命令行工具如:rcwakanda启动/停止/重启类似于apache等其他服务会有所帮助.
当 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
归档时间: |
|
查看次数: |
383 次 |
最近记录: |