Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将进程作为后台服务运行会导致异常_Java_Linux_File Permissions_Permission Denied - Fatal编程技术网

Java 将进程作为后台服务运行会导致异常

Java 将进程作为后台服务运行会导致异常,java,linux,file-permissions,permission-denied,Java,Linux,File Permissions,Permission Denied,下面的代码 try { String fileName = "/var/log/syslog"; File myFile = new File(fileName); FileInputStream myStream = null; System.out.println("canRead() returns " + myFile.canRead ()); System

下面的代码

try {


        String          fileName = "/var/log/syslog";
        File            myFile   = new File(fileName);
        FileInputStream myStream = null;

        System.out.println("canRead()  returns " + myFile.canRead ());
        System.out.println("canWrite() returns " + myFile.canWrite());

        myStream = new FileInputStream(myFile);
        myStream.close();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException: " + e);
    }
    catch (IOException e)
    {
        System.out.println("IOException: " + e);
    }
投掷

java.io.FileNotFoundException: /var/log/syslog (Permission denied)
当作为后台服务运行时

sudo start server
但在作为前台任务运行时成功

exec bin/server.sh
该文件已存在:

niru@node2:~$ ls -l /var/log/syslog
-rw-r----- 1 syslog adm 616642 Sep  6 15:59 /var/log/syslog
niru用户ID具有文件的读取权限:

 niru@node2:~$ id -a niru
 uid=2001(niru) gid=2001(niru) groups=2001(niru),4(adm),27(sudo)
 niru@node2:~$ head -3 /var/log/syslog
 Aug  1 15:47:57 node kernel: imklog 5.8.6, log source = /proc/kmsg started.
 Aug  1 15:47:57 node rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="535" x-info="http://www.rsyslog.com"] start
 Aug  1 15:47:57 node rsyslogd: rsyslogd's groupid changed to 103

有人能告诉我这是什么原因吗?

通过运行
sudo start server
进程不再以用户
niru
的身份运行,因此无法再访问系统日志文件。

此权限问题是因为在Debian发行版上运行服务的用户的凭据与用户的凭据

This bug in Upstart is documented here: https://bugs.launchpad.net/upstart/+bug/812870
例如,当以“niru”用户id登录时,“id-a”命令返回以下输出:

niru@node2:~$ id -a
uid=2001(niru) gid=2001(niru) groups=2001(niru),4(adm),27(sudo)
在服务流程的上下文中,相同的“id-a”命令返回:

uid=2001(niru) gid=2001(niru) groups=2001(niru)
因此,在服务上下文中,niru用户ID没有读取/var/log/syslog文件的权限

This bug in Upstart is documented here: https://bugs.launchpad.net/upstart/+bug/812870

将setgid参数添加到服务启动文件中解决了问题。

但当我对该进程进行ps时,我将用户视为niru。那么原因是什么呢?很好,用户niru拥有sudo权限。