linux下java执行shell命令

10yue 2007-06-22 01:21:15
我装的是linux8.0,mysql4.0,tomcat5.028,我想在jsp页面中调用shell命令来执行mysql数据库备份的命令。在linux的shell下,测试可以成功。命令如下:
[root@mynet mysql]# /usr/local/mysql/bin/mysqldump -u root -p7788919 axtic_cg >
/usr/xyz.sql
但是在jsp中却不行了。

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>

<body>
<%
String commandstr = "/usr/local/mysql/bin/mysqldump -u root -p7788919 axtic_cg > /usr/xyz.sql";
Process p;
try
{
out.print("start backup\n");
p = Runtime.getRuntime().exec(commandstr);
if (p.waitFor() == 0)
{
out.print("backup over\n");

}
else
{
out.print("backup fail\n");

}
}
catch (Exception e)
{
out.print("backup fail\n");
out.println(e.toString());
}
%>
</body>
</html>
可是我把命令改成了String commandstr = "who am i"
却又显示的是backup over.
...全文
3750 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelseyes 2007-07-03
  • 打赏
  • 举报
回复
路过,顶一下
10yue 2007-06-24
  • 打赏
  • 举报
回复
谢谢。看看先。
10yue 2007-06-23
  • 打赏
  • 举报
回复
这是在jdk里面找到的,gameboy999你说的是这个吧

创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。
iwillrockyou 2007-06-23
  • 打赏
  • 举报
回复
学到东西了。。。
gameboy999 2007-06-23
  • 打赏
  • 举报
回复
去google搜索一下 ExecRunner pitfall

http://www.koders.com/java/fidE74E642685BBC1DC815063846EAB0BC63566E554.aspx
10yue 2007-06-23
  • 打赏
  • 举报
回复
没有找到清空
getOutputStream(),getInputStream(),getErrorStream(),
gameboy999,能发个例子吗?
10yue 2007-06-22
  • 打赏
  • 举报
回复
谢谢gameboy999指点,我找找资料。
10yue 2007-06-22
  • 打赏
  • 举报
回复
今天又测试了一下,在jsp中使用tomcat的命令可以执行。
String commandstr = "/usr/tomcat/bin/shutdown.sh";
这个命令可以执行,不知道为什么备份mysql的就不行了。大家帮忙看看。
10yue 2007-06-22
  • 打赏
  • 举报
回复
自己up
yingzi107 2007-06-22
  • 打赏
  • 举报
回复
程序员群 41801837
gameboy999 2007-06-22
  • 打赏
  • 举报
回复
原因是java runtime.process run的一个bug

网上有很多解决方案

只有把outputstream /error stream即使的清空,命令才能完成,否则会一直等待

而且linux/solaris下面默认的shell buffer很小,很容易出现这种情况
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[领航车(leader)] · 训练集:414 张 · 验证集:39 张 · 测试集:20 张 · 总计:473 张 该数据集聚焦于室内走廊环境中对领航车的精准识别与定位,具备高度场景专一性与实际应用价值。图像采集于光线均匀、结构规整的建筑内部通道,背景干扰因素少,有利于模型在复杂环境下的目标提取能力训练。领航车作为核心检测对象,在不同距离和角度下均被清晰标注,为智能导航系统、自动化引导设备等提供可靠的数据支持。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 77 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.9141 Precision | 0.9985 Recall | 1.0000 train/box_loss | 0.5224 train/cls_loss | 0.2526 val/box_loss | 0.4307 val/cls_loss | 0.1407 【训练过程分析】 77 轮训练后 mAP50 达到 0.9950,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9141,和 mAP50 差距仅 0.08,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9985、Recall 1.000... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧