Java-执行sh文件脚本-没有权限问题排查和解决-strace追踪
1. 测试代码
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
try {
//为了不退出进程,方便确认运行中的状态
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
}
}
}).start();
Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "sudo chmod +x test.sh"}).waitFor();
Process process = Runtime.getRuntime().exec("sudo sh /home/test/test.sh");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
2. 直接在某些服务器环境运行出现权限不足
java.io.IOException: error=13, 权限不够
使用:
java -Djava.security.manager -Djava.security.policy=all.policy -jar JdkTest.jar 和
sudo java 这些都不行 。
3. 按网上的文章找根本原因和解决方案
https://blog.csdn.net/weixin_44524143/article/details/144720867
使用 strace 工具进行排查。strace 是一个非常强大的工具,可以帮助我们追踪程序的系统调用,特别适合排查文件访问和权限问题。
strace -f -o output.txt java -Djava.security.manager -Djava.security.policy=all.policy -jar JdkTest.jar
cat output.txt | grep 权限
20719 execve("/userdata/java/jdk-17.0.14/lib/jspawnhelper", ["12:15"], 0x7ffe0f0ff8 /* 48 vars */) = -1 EACCES (权限不够)
chmod +x /userdata/java/jdk-17.0.14/lib/jspawnhelper
java -jar JdkTest.jar
另外:AI上解决不了的疑难杂症,也用普通百度搜索下问题。
正文到此结束