- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个perl脚本,它接受唯一的参数(其中一个参数是--user=username_)。用户可以使用我正在开发的web界面启动这些进程。
MySQL表transactions跟踪运行perl脚本的用户
id user script_parameters execute last_modified
23 alex --user=alex --keywords=thisthat 0 2014-05-06 05:49:01
24 alex --user=alex --keywords=thisthat 0 2014-05-06 05:49:01
25 alex --user=alex --keywords=lg 0 2014-05-06 05:49:01
26 alex --user=alex --keywords=lg 0 2014-04-30 04:31:39
最佳答案
似乎您正在尝试从web服务器启动长时间运行的进程,然后在数据库中跟踪这些进程。这不是不可能的,但不是推荐的做法。
主要问题是,一个HTTP请求需要在web服务器中处理,因为您实际上做了任何事情(包括跟踪系统上运行的进程)--您需要一些可以一直运行的东西。。。
相反,一个更好的主意是让另一个守护的“manager”进程(正如您提到的perl,这是一种编写它的好语言)生成并跟踪长时间运行的任务(通过PID和信号),并让该进程更新您的SQL数据库。
然后,您可以让“管理器”进程侦听从web服务器启动新进程的请求。您可以使用各种IPC机制。(例如:信号、SysV shm、unix域套接字、进程内队列(如ZeroMQ等)。
这有多种好处:
如果生成的脚本需要与基于用户/组的隔离(从系统或彼此)一起运行,则web服务器不需要以根用户身份运行,也不需要setgid。
如果生成的进程“崩溃”,则会向“管理器”进程发送一个信号,以便它可以无问题地跟踪错误执行。
如果使用进程内队列(例如:ZeroMQ)将请求传递到“manager”进程,则它可以“限制”来自web服务器的请求(这样用户就不会有意或无意地导致D.O.S)。
无论生成的进程是否顺利结束,都不需要向web服务器发出“活动”HTTP请求来更新跟踪数据库。
至于应该运行的东西是否正在运行,这实际上取决于您的语义。(即:是否基于已知的运行时间?基于消耗的数据?等等)。
检查它是否正在运行可以有两个方面:
“manager”进程会根据需要更新数据库,包括派生的PID。
您的web服务器托管代码实际上可以列出进程,以确定数据库中的PID是否正在实际运行,甚至确定它做了多少有用的事情!
检查它是否未运行必须基于以下约定:
将生成的进程命名为您可以预测的进程。
获取一个进程列表以确定哪些进程仍在运行(已失效?)那不应该。
在这两种情况下,您可以通知请求生成进程的用户和/或实际对此做些什么。
一种方法可能是有一个CRON作业,它从SQL数据库中读取数据,并确定需要重新启动哪些派生进程,然后使用web服务器使用的IPC机制重新请求“manager”进程这样做。如何在跟踪/监视/日志记录中区分启动和重新启动取决于您。
如果服务器本身断电或崩溃,则可以让“管理器”进程在首次运行时执行清理,例如:
在数据库中查找在服务器关闭之前一直在运行的派生进程的条目。
通过PID和运行时检查这些进程(这很重要)。
要么重新生成未完成的生成过程,要么将某些内容存储在数据库中,以向web服务器指示是这种情况。
更新#1
根据你的评论,这里有一些开始的提示:
您提到了perl,所以假设您在这方面有一定的熟练程度--下面是一些perl模块,可以帮助您编写“manager”过程脚本:
如果您还不熟悉它,那么CPAN是perl模块的存储库,它基本上可以做任何事情。
Daemon::Daemonize-对进程进行守护,以便在您注销后继续运行。还提供了编写脚本以启动/停止/重新启动守护程序的方法。
Proc::Spawn-帮助生成子脚本。基本上是ps
然后fork()
,但也处理子进程的STDIN/STDOUT/STDERR(甚至tty)。您可以使用它来启动长期运行的perl脚本。
如果您的web服务器前端代码还没有用perl编写,那么您将需要一些非常可移植的东西来进行进程间消息传递和队列;我可能会让您的web服务器前端易于部署(比如PHP)。
这里有两种可能性(还有更多):
Perl和PHP实现。
Spread Toolkit和Perl库的实现。
PHP-您可以对正在运行的进程使用此检查(并获取上面讨论的所有类型的统计信息)。
ZeroMQ-使用此包中的高粒度时间函数来实现“限制”框架。基本上就是限制每单位时间内取消排队的请求数。
Proc::ProcessTable(使用Time::HiRes)-从“管理器”进程更新MySQL数据库。
关于mysql - 如何使用MySQL管理服务器端进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573393/
我在使用 Jade 和 express 时遇到了一些问题。这是 serder 端: router.get('/login', function (req, res) { res.status(2
是否可以使用 JavaScript 服务器端,从而在某些核心计算中不会显示在页面源代码中? 我正在开发一款游戏,代码的一个关键部分只需要在服务器端计算然后传回客户端。 我的整个游戏都是用 Javasc
我正在寻找有关如何使用 ExtJS 4 实现安全页面的信息。我所说的安全页面是指用户将使用 Siteminder (SSO) 登录我们的网站,因此我们将拥有用户的身份。然后我们将通过进行数据库/LDA
我的 Centos 7 服务器正在运行 apache 2.4.6,并且正在使用 mod_wsgi 提供 django webapp。我的问题是我无法从另一台计算机的浏览器访问服务器 url。我没有从
我们收到了客户的请求,要求我们基于 ExtJS 框架构建 Web 应用程序。我查看了互联网,发现 ExtJs 只是一个客户端 javascript 控件,但我认为 Web 应用程序也必须具有服务器端
我有三个组件。 组件一包含组件二和三。 组件二是一个列表。 组件三用于向数据库添加项目。 当我将一个项目保存到数据库时,我想更新组件二中的列表。 我怎么做? 最佳答案 设想 让我们假设:
欢迎, 我正在寻找能使我以尽可能高的格式下载youtube视频的youtube api。 几年前,这项工作更为简单,因为url拥有关于质量的信息,例如“fmt = 22”或“fmt = 6”,我们现在
我想将电子邮件 x@x.com 的用户密码设置为“an”。但代码不起作用。这是我的云代码: Parse.Cloud.define('testSetPasswordForUser', functio
正在阅读http://cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html这篇文章,想知道如何在服务器端实现它,是否像将文件放在htd
我有一个使用一些 css/javascript 选项卡的 php 脚本,它们在我的本地服务器上运行,但当我上传到我的在线服务器时则不起作用。 只是想知道是否有人知道为什么会出现这种情况?所有路径都
是否可以从 JavaScript 脚本获取服务器端页面的源代码?我希望能够获取服务器上同一文件夹中的页面的源代码。除了javascript之外,是否可以不使用任何其他东西? 最佳答案 如果您想从 ja
.NET 4.0 我正在寻找在我们的服务器上生成Word文档的最简单方法。 局限性: 服务器端 我不想在服务器上安装word 数据源是XML 我试图用XSLT生成快速简单的DOCX,但是我可以找到的用
我正在使用 native jQuery 验证库来验证在联系表单中输入的电子邮件地址。由于这是一个表达式引擎站点,因此我使用其电子邮件验证器作为服务器端备份。 当我输入 test@b.c 时,jQuer
我使用带有服务器端处理的数据表来显示数万行。我需要通过复选框过滤这些数据。我能够制作一个工作正常的复选框,但我不知道如何添加多个复选框以协同工作。我找到了 similar solution在这里,但我
我正在尝试编写一个消息传递应用程序,并且我能够发送消息(显示为服务器客户端正确显示消息)但随后将我的客户端踢出服务器。服务器打印以下错误: java.io.EOFException at java.i
如果设备是移动设备,如何防止侧边栏加载服务器端资源?我了解如何通过 CSS 隐藏,但我更感兴趣的是防止对服务器的调用。 最佳答案 WordPress有一个名为wp_is_mobile()的函数它将检查
我有一个返回 text/event-stream 数据的网址,因此我尝试连接并打印我找到的所有内容: var url = "..." var source = new EventSource(url)
我得到这样的错误列表:{ error: [ "Email is required", "First Name is required"] } 我需要如何修改它,以获取包含字段名称的列表? public
我正在尝试使用 ASIFormDataRequest 将数据发送到 ASP.net 服务器端。我创建了一个aspx页面。目前我可以得到这两个纯文本。但是我不知道如何通过 Request.Form 在
我在 ${host}/api/graphql 有一个可通过 POST 访问的快速 graphql 端点。 在那条路线上,我有身份验证中间件,如果用户未登录,我想重定向到登录页面。 看起来有点像这样。
我是一名优秀的程序员,十分优秀!