linux 下 java 文件无权限运行问题

本贴最后更新于 2818 天前,其中的信息可能已经时移世易

spring-boot 开发的爬虫项目,基于 web 的。java web 的文件,或者 java 生成的文件无权限运行等关于权限的问题,我都想可以通过如下的方式来进行!

好方法

很好的想法是我在兼容 linux 和 windows 两个系统,实现很简单,把两个驱动同时放在这里就行。


if ("Linux".equals(System.getProperty("os.name"))) {
            logger.info("Linux:  phantomjs.binary.path:phantomjs/phantomjs");
            System.setProperty("phantomjs.binary.path", StartOfOS.class.getClassLoader().getResource("").getPath() + "phantomjs/phantomjs");
        } else {
            logger.info("windwos:  phantomjs.binary.path:phantomjs/phantomjs.exe");
            System.setProperty("phantomjs.binary.path", StartOfOS.class.getClassLoader().getResource("").getPath() + "phantomjs/phantomjs.exe");
        }

问题

如图,phantomjs 的驱动,显示如图的报错!

5b5f31f265d045f7bbd59a5d44abc879-phantomjs.png

尝试

先看了 log,没发现什么问题,然后 google,也没有结果。由于经验不多,就手动进行了如下的尝试。

我单独写了个 java 程序,发现可以正常运行,但是改方法却不行。于是想到了是权限的问题。

讲道理,如果最后部署在 docker 里,我猜,没有权限的问题吧?

解决

想直接 chomd 777 ,不过考虑到移植性,坐了如下的权限处理!

直接给该文件赋予可读权限!(ps:目前我遇到的所有 linux 问题,90% 都是权限导致的)

File phantomjsFile = new File(StartOfOS.class.getClassLoader().getResource("").getPath() + "phantomjs/phantomjs");
        logger.info("是否可执行:" + phantomjsFile.canExecute());
        if (!phantomjsFile.canExecute()) {
            phantomjsFile.setExecutable(true);
            if (!phantomjsFile.canExecute()) {
                logger.error("爬虫软件无权限运行!");
            }
        }

总结

linux 权限的问题,很多。自己被坑了好多好多次。

开发提前在运行环境做测试,或者直接在运行环境下开发。

我想,大概过不了多久,我想主动把所有的开发都在 linux 上进行了。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    946 引用 • 943 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Joshua

    关于权限问题,我问过网易的新勇大佬,下面是他的回答:

    **估计你还是没有太搞明白系统的账户权限管理,一般来说,常见的权限是 0644,甚至 0600。如果大量使用 0777 的话,一定是你使用账户方式的问题,而且给文件 0777,一般来说也是有安全风险的,个人机器还好,但是如果是服务器上的话,肯定是不能接受的。

    **比如,你可能创建了一个文件夹是 root 用户创建的,然后你自己用户 foo 当然就没权限访问了。

    **关于权限,你可以使用 ls -l 这个可以看到这个文件/文件夹的权限以及 owner。比如一个文件的权限,一般创建后,其权限是 0644,owner 是 root,那么非 root 用户就没有写权限。如果确定这个文件夹是你自己的账户需要的话,可以使用 chown 的修改文件文件夹的 owner 即可

    ps:当年我是真的菜。。

    1 回复
  • xjtushilei

    学到了!大佬