从网页或Web服务器与后台作业通信

0 投票
2 回答
1103 浏览
提问于 2025-04-15 14:43

我有一个“设备”(因为找不到更好的描述),它运行着Linux系统。

现在我通过SSH远程登录到这个设备上来启动任务。但这样对我的用户来说不太友好,所以我打算做一个简单的网页界面来启动脚本。一个任务的运行时间从10秒到几个小时不等。这个网页界面需要能够显示任务的状态。

我之前解决过类似的问题,方法是在服务器上运行一个守护进程,它会监视一个存放任务请求的目录(或者数据库表),当有新任务请求时就启动一个进程,监控这个进程,并把信息存储在数据库表或状态文件中供网页界面使用。网页界面会把任务请求放到这个目录(或数据库)里,并偶尔检查状态文件(或数据库)。不过这样做可能有点过于复杂了。

对于当前的任务,我在考虑从CGI启动任务,并偶尔检查一个状态文件,这个文件会在任务进行或结束时被写入。

我的问题是:有没有更好(更简单/更快写/更可靠)的方法来实现这个?有没有现成的模式或工具是我应该了解的?

(Python的解决方案是最理想的。)

谢谢。

2 个回答

0

我不太确定我是否理解了你的问题,但我猜你的意思是你有多个可以同时运行的“任务”,想在网页上显示这些任务是否完成?

当你启动一个任务时,网页(比如用python和mod_wsgi)会启动一个python脚本,这个脚本会把任务记录到一个数据库里,比如sqlite,并开始执行这个任务。一旦任务完成,脚本就会更新这个任务的记录,把它标记为完成。

状态页面只会显示sqlite数据库里的内容。

你想在数据库中记录的内容,除了任务ID和可能的开始/结束时间,还取决于你想在任务状态网页上显示什么信息。

顺便提一下,如果这些“任务”是编译的话,可以看看Hudson

2

我在很多项目中都这样做过。比如一个网络应用(主要用Python和CGI),它会启动一个单独的Python脚本(通过subprocess),这个脚本会立刻变成一个后台进程,开始执行任务。然后,网络应用会不断发送AJAX请求来检查这个后台进程的进展情况(我用简单的文本文件来进行通信,使用数据库可能会更好)。一个不错的做法是,让后台进程在完成后给最终用户发邮件(邮件里有一个链接可以查看结果)。这样,用户就可以在那些需要几个小时的任务上关闭他们的网页浏览器。

撰写回答