【发布时间】:2015-10-14 00:45:02
【问题描述】:
我想知道是否可以创建一个 javascript 警报,提示用户有以前提交的表单并且它仍在处理或后端脚本仍在运行。运行时过程通常需要 2-5 分钟。
下面的html代码摘录
<form id="form" method="POST">
<p id="survey">
<label for="list"><b>Run survey to check number of NGPOS deployed</b></label>
</p>
<p>
<label for="division">Please select division:</label>
<select type="list" id="list" name="division">
<option>--Select One--</option>
<option value="DENVER">Denver</option>
<option value="PHOENIX_SOUTHWEST">Phoenix-Southwest</option>
<option value="PORTLAND">Portland</option>
<option value="SOUTHERN_HOUSTON">Southern-Houston</option>
<option value="NORCAL">Norcal</option>
<option value="SEATTLE">Seattle</option>
<option value="VONS_SoCal">Vons-Socal</option>
<option value="EASTERN">Eastern</option>
</select>
</p>
<p id="survey">
<input type="submit" value="Run Survey" onclick="surveyFunction();"/>
</p>
</form>
javascript 函数正在后端调用 perl 脚本
function surveyFunction(){
var div = document.getElementById("list").value;
$.ajax({
type: "POST",
url: "possurv.pl",
data: 'division=' + encodeURIComponent(div),
});
}
perl 脚本依次执行一个 shell 脚本,我在 shell 脚本上添加了一个 .sem 文件以禁止执行多个实例。但是前端的用户却无从知晓。
perl 脚本摘录
$div = $FORM{division};
$expect = `./expect.sh $div`;
shell脚本摘录
sem="${log_path}/pos_survey.sem"
echo $0 "started."
if [ -e $sem ]
then
echo $0 "still running, exiting."
exit 1
else
touch $sem
fi
【问题讨论】:
-
您在
if [ -e $sem ]上有一个竞争条件。如果两个进程都看到文件不存在怎么办? -
@Karoly 对不起,我不明白这是怎么回事。你是说如果进程在同一个实例中执行?进程运行时只能有一个 .sem 文件,并且在 shell 脚本结束时它将删除此 .sem 文件
-
Reaaaaally 希望您正确地检查您的输入,上帝禁止有人更改表单以提交
; rm / -rf的部门... -
@Daniel 即使有人更改了我认为不会执行的表单。调用 shell 脚本的 perl 脚本正在通过这个语句“sh survey/NGPsurvey.sh [lindex $argv 0]”传递变量,我相信它只会出错,并且在 shell 脚本上,变量应该匹配一个文本文件,它将连接其内容。
标签: javascript perl shell