原创

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上解决不了的疑难杂症,也用普通百度搜索下问题。

正文到此结束
本文目录