V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  gzk329  ›  全部回复第 3 页 / 共 6 页
回复总数  118
1  2  3  4  5  6  
2022-11-14 16:31:25 +08:00
回复了 gzk329 创建的主题 程序员 Springboot 中 想要重启服务 该怎么写?
@pengyOne
`String[] commands = {BIN_BASH, "-c", "nohup sh restartWorker.sh"};`

```
pid=`jps -l | grep xxx | head -1 | awk '{print $1}'`
echo $pid
kill -9 $pid
while [[ $pid != "" ]]; do
echo '服务停止中...'
sleep 1
pid=`jps -l | grep xxx | head -1 | awk '{print $1}'`
done
echo '服务停止成功,开始重启服务...'
java -jar xxx.jar
```
脚本应该如何修改? 这个脚本只会 kill 不会启动
java 是用 Runtime.getRuntime().exec(commands); 执行的 shell 命令
2022-11-14 15:23:11 +08:00
回复了 gzk329 创建的主题 程序员 Springboot 中 想要重启服务 该怎么写?
@lower 不能手动 我在程序里边 调用外部脚本 脚本中把程序关了 这个脚本还会继续执行吗?
2022-11-09 15:31:21 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@quicksand 我之前也怀疑 是在执行命令前 sleep 一会儿 按理说这时候命令还没有执行
但是这个方法执行的条件是 spark 作业已经进入最终态了 我怀疑是不是查到 spark 进入最终态了 然后其实它还没有执行完
yarn logs 这个命令是拿的 sparkd 的聚合日志 需要 spark 作业已经执行完
这个中间是不是有个时间差 导致的
所以我又去这个日志收集之前做了一个 sleep 好像没用 就很奇怪
2022-11-09 15:27:33 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@xboxv 不需要三秒,我之前测了一下 最少大概 500ms 有时可以 800ms 稳定可以
2022-11-09 13:09:41 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@xboxv 我的 command 就很简单的一句
String[] commands = {BIN_BASH, "-c", "yarn logs -applicationId " + applicationId};
2022-11-09 11:36:53 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@fengyiqiao 我试过 读取来的日志文件是空的
2022-11-09 11:35:56 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@senninha 这个我也试过 能读到 error 流,我的这个命令是获取 spark 作业的聚合日志,error 输出告诉我找不到日志。
但我这个逻辑是在作业程序结束后才会执行的 所以不应该获取不到日志输出的。
然后我开始想的是在异步读输出前先休眠,或者直接循环读,读到有结果才停止,但是不生效。
2022-11-09 11:31:13 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
还有一个在这句 process = runtime.exec(commands); 之前加一个线程休眠 3s 也能解决问题?有人知道这可能是什么原因吗?是在这句之前,我的理解是命令还没有开始执行呢 先休眠三 s ,就可以执行之后的 process.waitfor 然后异步消费输出流那套逻辑了,这是为啥呀?
2022-11-09 11:29:06 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@Pantheoon 谢谢,不过这个好像主要是对不同环境的命令做了自动匹配,并没有处理这个问题
2022-11-09 11:17:41 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
@fengyiqiao java 中这些本质上都是一套吧 命令里边 1>file 或者是 processBuilder 里边重定向到文件都是 走的一套逻辑,都被缓冲区大小限制的,都不行。 命令直接在 bash 中是可以执行的
2022-11-09 09:54:41 +08:00
回复了 gzk329 创建的主题 程序员 Java IO 相关 Process 执行命令获取输出 输出很大该怎么读取?
还有一个在这句 process = runtime.exec(commands);打一个断点就能正常获取输出流 全局或者线程断点都 OK 因为是单线程
不打断点 就拿不到输出流
@Kasumi20 ProcessBuilder
2022-10-16 20:37:30 +08:00
回复了 gzk329 创建的主题 Java docker 容器中运行的程序 怎么在它运行的时候把它标识出来?
@superrichman 这个不行吧 程序也能复用的 一个程序多次执行 会有多个容器 但程序还是那个程序 除非是在执行参数上再设定一下 然后再获取环境变量 这个环境变量得每次不同才行
2022-10-16 20:34:11 +08:00
回复了 gzk329 创建的主题 Java docker 容器中运行的程序 怎么在它运行的时候把它标识出来?
@swulling 可以 我试了一下 确实是的 能解决了 谢谢
2022-10-16 20:24:10 +08:00
回复了 gzk329 创建的主题 Java docker 容器中运行的程序 怎么在它运行的时候把它标识出来?
@ch2 我要做的就是 一个业务程序 会有业务状态 业务状态变化要向管理模块汇报 业务程序有部分也需要放到 docker 中执行 这部分怎么标识他自己 我怎么知道是哪个汇报过来的 要实现的是这个
不过我很好奇 为啥我项目里会有 module-info 这些?
我是用的 jdk8 zulu 提供的 jdk
但我网上查 这个 module-info 好像是 java9 的特性?
@Macolor21 谢谢 这个我已经解决啦 我是通过 shade 查找冲突 然后排出
最后 jacoco 同名类是在 jacoco 插件配置中成功把同名类排除掉了
2022-10-01 14:53:39 +08:00
回复了 Deteriorator 创建的主题 程序员 刚续费了 Jetbrains 全家桶三年
续一年 当期的所有发行版都能永久使用的啊 这个需要每年追新吗 我还的还没到期 我还想着到期了也就不升级了
@gzk329 没问题了 是我又搞错了
@ysc3839 感谢回答 基本已经解决我的问题了 谢谢
我用的这个是 RuntimeUtil.exec()是 hutools 提供的 api 可能是我没用明白
换成 jdk 提供的 Runtime.getRuntime().exec(commands) 按照您说的正确方式传参就没问题
new ProcessBuilder(command, arg1, arg2)

但是我还有一个问题 我在 java 程序中起的进程算是子进程吗? 是 ps -elf 这类命令是查不到子进程吗 我发现我起一个进程 拿到进程号 用 ps -elf 就查不到 如果是 linux 读 /proc 能读到,mac 使用 lsof -p 也能读到
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5427 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 07:38 · PVG 15:38 · LAX 00:38 · JFK 03:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.