zoukankan      html  css  js  c++  java
  • 以服务方式启动tomcat无法访问NFS共享盘

    用startup.bat方式启动tomcat,程序的可以访问NFS共享盘的文件。但用

    1).以服务的方式启动tomcat

    2).或者用windows的任务计划去执行startup.bat的方式启动tomcat

    以上两种方式启动tomcat,程序都无法访问NFS共享盘。

    在网上找了n多的资料,心里历程如下:

    eg:https://blog.csdn.net/zhya910702/article/details/46457137

    不行,然后换思路,用windows任务计划,在计算机启动时自动执行startup.bat,结果还是不行。。

    然后网上找了很多说是用户权限问题,然后查找用户相关,域相关、权限相关资料,各种尝试,都不行。

     最终解决方案:

    1.修改文件上传路径:

    192.168.0.194上设置的NFS共享文件如下:                     tomcat服务在192.168.0.18上,将代码中文件上传下载路径E:upload注释,替换为\192192.168.0.194NFSupload

                       

    2.只做了上步还不行,还需要修改服务的登录账户,截图如下:

     

     这个方案参考参考:https://www.iteye.com/blog/yorkyao-772389 (后面总结的三点挺好的,其截图如下)

    多台tomcat主机(win2003平台)做负载均衡时,希望共享虚拟目录,没有采用同步各主机虚拟目录的方式,所以只能在文件服务器上开辟共享目录,将tomcat的context docpath指向它。tomcat主机上将共享目录映射为本地磁盘,配置如下
    
     
    
    <Context docBase="V:shareDir" path="/app"/>
    
     
    
    如果是script方式(通过startup.bat),可正常启动,以服务方式启动tomcat时,总是报“Document base  does not exist or is not a readable directory”,修改tomcat启动服务账户为administrator,问题依旧,怀疑服务模式下无法访问网络驱动器,将docbase指向共享目录的UNC path即远程访问方式
    
     
    
     <Context docBase="\192.168.1.2shareDir" path="/app"/>
    
     
    
    新的错误出现了,报“java.io.IOException: 登录失败: 未知的用户名或错误密码”,说明tomcat是可以通过unc path来配置context的docbase,不过当前的这个账户访问受限,奇怪的是,在当前桌面环境中是可以顺利访问\192.168.1.2shareDir这一路径的。联想到这组服务器都是在windows域控制环境下,以域用户登录系统并将服务启动账户改为域用户domainadministrator,问题解决。
    
     
    
    总结:
    
    (1) tomcat可以通过unc path来配置context的docbase
    
    (2)因为映射的网络驱动器,是在用户的profile中配置, 服务模式下tomcat不能访问到网络驱动器(猜想,可能可以通过修改profile来访问网络驱动器)
    
    (3)若远程共享目录只有域用户才能访问,在启动tomcat服务时,必须指定以域用户启动服务
    此网址内容

    2019.12.03: 

       经验证,这个方案也不行。刚开始按照这个方式做是可以的。后面详细测试时,发现,下载只能下载通过这种方式上传的文件,以前上传的文件无法下载。使用startup.bat方式启动后,也不得。我是彻底懵了。

    2019.12.04:

    再经验证,这个方法是ok的,3号不行是因为,改后存到数据库的地址是\\192.168.0.18\NFS\upload\.....     而改之前的地址是 E:\upload\......  ,故下载之前上传的文件肯定不行啊,修改数据库地址改一下就可以了。

     另,采用此方案,挂载磁盘就是非必要的了。

    注: 这个方案要改代码、改数据库历史数据,也不是很好的方案,但实在是找不到更好的解决方式了,网上的方式用了个遍,研究了好几天时间,都不行啊。  谁有更好的解决方法望提供下,感激不尽。

     第二个方案(不推荐)

    是比较hack(黑客的),参照https://blog.csdn.net/weixin_33716557/article/details/86223618

    也能实现,且不需要修改代码挺好的。但关机重启后,共享盘就没了,设置了net use /persistent:yes也不起作用。

    方法如下:

    下载PSTools.rar,解压,然后再PSTools文件夹下黑窗执行 psexec -i -s cmd.exe。如下图:

     PSTools.rar下载地址(放我网盘里了)

    https://pan.baidu.com/s/1-iTrjiNNntBfWWlZh_Rcfg 提取码:8rja

  • 相关阅读:
    《STL源码剖析》-- 序列式容器
    IPV6 组播学习理解
    C 语言指针 引用学习
    C++ list 源码学习
    汇编基础学习---浮点运算
    C++ 运算符重载
    C++ 迭代器学习
    Play框架连接Mysql遇到的一些问题
    Jython中文乱码问题
    多线程之生产者消费者模式
  • 原文地址:https://www.cnblogs.com/zdyang/p/11899654.html
Copyright © 2011-2022 走看看