【问题标题】:switch user in Process Builder在 Process Builder 中切换用户
【发布时间】:2015-12-14 21:09:08
【问题描述】:

我想切换用户,然后在新用户下启动命令。 其实我的代码是

String[] commandToRun2 = {"su","-","jboss", "./jboss-cli.sh -c :shutdown(restart=true)"};
ProcessBuilder pb = new ProcessBuilder(commandToRun2);
pb.directory(new File("/home/jboss/soft/jboss-as-7.1.1.Final/bin/"));
Process p = pb.start();

但我不能让它工作。

【问题讨论】:

  • 它到底是怎么不工作的?日志中有异常吗?
  • 无异常,只是正常结束进程,没有正确执行命令。在 root 下使用相同的命令(没有 su)可以正常工作。
  • 您是否手动测试了您的su 命令?您是否从与测试 su 相同的用户启动您的 java 应用程序?
  • 是的,我做到了。我有 2 个 Jboss 实例,1 个在“root”用户下,另一个在“jboss”用户下。我需要使用“su”命令在 jboss 下启动应用程序。
  • 如果你Thread.sleep 1 分钟给创建的进程一些时间呢?

标签: java linux processbuilder


【解决方案1】:

根据this SuperUser answer,您对su 的调用似乎不太正确。

从那个问题来看,su 命令应该是这样的

su [username] -c "[command]"

因此,请尝试以下方法:

String[] commandToRun2 = {"su", "jboss", "-c", "./jboss-cli.sh -c :shutdown(restart=true)"};

顺便说一句,记录写入进程标准输出和标准错误的任何输出可能会有所帮助。如果出现错误,您将能够看到错误是什么,并且如果进程生成大量输出,则读取输出将防止输出缓冲区填充和阻塞进程。 This answer 演示了如何做到这一点。

【讨论】:

  • 如何通过java代码为用户提供密码?
  • @HyperioN OP 以超级用户身份执行,因此无需提供密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多