如何用jsvc以root身份做事?

时间:2011-07-21 17:58:31

标签: java jsvc

我正在尝试使用jsvc来创建一个守护进程,听起来某些事情可以用root来完成(例如,Tomcat显然可以绑定到特权端口)。我想知道的是如何做到这一点。

在我的简单守护进程程序中,我尝试打开一些只能在init()进程中以root身份读取的文件,但我已经以我当时选择的用户身份运行(在我的情况下,“没人”) “)。如果Tomcat可以绑定到特权端口,似乎我应该能够打开root拥有的配置文件。

我是否正在尝试做jsvc不适用的事情,或者我只是遗漏了什么?

我的代码:

public class MediaProcessorDaemon implements Daemon {

    ClassPathXmlApplicationContext spring = null;

    /*- (non-Javadoc)
     * @see org.apache.commons.daemon.Daemon#init(org.apache.commons.daemon.DaemonContext)
     */
    @Override
    public void init(DaemonContext context) throws DaemonInitException, Exception {
        /* This next line throws an exception */
        this.spring = new ClassPathXmlApplicationContext("/META-INF/spring/media-processor-context.xml");
    }

    /*- (non-Javadoc)
     * @see org.apache.commons.daemon.Daemon#start()
     */
    @Override
    public void start() throws Exception {
        this.spring.start();
    }

    /*- (non-Javadoc)
     * @see org.apache.commons.daemon.Daemon#stop()
     */
    @Override
    public void stop() throws Exception {
        if (this.spring != null) {
            this.spring.stop();
        }
    }

    /*- (non-Javadoc)
     * @see org.apache.commons.daemon.Daemon#destroy()
     */
    @Override
    public void destroy() {
        if (this.spring != null) {
            this.spring.close();
        }
    }
}

错误信息:

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: /etc/media/media-processor.properties (Permission denied)
        at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:78)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at com.mycompany.mediaprocessor.MediaProcessorDaemon.init(MediaProcessorDaemon.java:24)
[snip]

所以在init()中,我正在尝试打开一个只能由root(/etc/media/media-processor.properties)读取的文件,并且我收到“权限被拒绝”。

我这样执行:

sudo jsvc -debug -user nobody -cp $classPath com.mycompany.MediaProcessorDaemon

0 个答案:

没有答案