linux下不同用户下的java系统偏好

Posted

技术标签:

【中文标题】linux下不同用户下的java系统偏好【英文标题】:java system preferences under different users in linux 【发布时间】:2014-07-20 13:25:08 【问题描述】:

我试图在一个 linux 机器上以不同的用户运行多个 jvm(包括 tomcat)。我没有看到太多问题,但在 catalina.out 中我一直看到:

May 30, 2014 1:16:16 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 7626 ms
May 30, 2014 1:16:37 PM java.util.prefs.FileSystemPreferences$2 run
WARNING: Could not create system preferences directory. System preferences are unusable.
May 30, 2014 1:16:55 PM java.util.prefs.FileSystemPreferences checkLockFile0ErrorCode
WARNING: Could not lock System prefs. Unix error code -158097957.
May 30, 2014 1:16:55 PM java.util.prefs.FileSystemPreferences syncWorld
WARNING: Couldn't flush system prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.

我做了一些挖掘/阅读并推断出以下内容:

具有 root 访问权限的管理员必须创建系统首选项目录/etc/.java/.systemPrefs with drwxr-xr-x access.

Java 正在寻找 /etc/.java/.systemPrefs/.system.lock/etc/.java/.systemPrefs/.systemRootModFile

手动创建上述文件(使用“触摸”创建空文件)及其包含的目录应该修复。文件的权限应该是544,目录的权限应该是755,所有者和组都是root。

但是

我不是 root,让某人运行 root 很昂贵,而且我有多个用户运行 jvm,这是否意味着我必须创建这些文件并设置权限,以便所有用户都可以访问这些权限?

有没有人遇到过这个问题,如果他们有我缺少的更简单的解决方案?

【问题讨论】:

【参考方案1】:

为每个用户设置这些设置:

mkdir -p ~/.java/.systemPrefs
mkdir ~/.java/.userPrefs
chmod -R 755 ~/.java
export JAVA_OPTS="-Djava.util.prefs.systemRoot=/home/user/.java -Djava.util.prefs.userRoot=/home/user/.java/.userPrefs"
  <run appl>

在不创建目录的情况下,一些 Java 虚拟机默认为/etc/

另请参阅:Java - Setting Preferences backingstore directory

【讨论】:

【参考方案2】:

我的想法是,即使你有不同的用户,JVM 仍然将 tomcat 作为一个用户读取,因为它是同一个进程。也许您需要的是用户管理机制?登录和注销

【讨论】:

【参考方案3】:

我通过将执行的 Bash 程序的权限设置为 755 来解决此问题

ls abc.sh
chmod 755 abc.sh

【讨论】:

【参考方案4】:

只需授予 /etc/.java 的完全权限

chmod -R 777 /etc/.java/

sudo chmod -R 777 /etc/.java/

【讨论】:

以上是关于linux下不同用户下的java系统偏好的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取Linux操作系统下的硬件信息

Linux系统运行级别

Linux学习之十六-Linux用户管理

Linux学习之二-Linux系统的目录结构

java程序怎样读取linux系统下的文件

linux 基础储备