【发布时间】:2018-10-04 07:34:39
【问题描述】:
我正在编写一个可以运行 systemd 服务的 Java 应用程序。
我有两个 systemd 服务(service1 和 service2)。 service1 将启动 Java 应用程序。然后在应用程序内部它应该启动service2。 我使用以下语句启动service2:
Runtime.getRuntime().exec(new String[]{"sh", "-c", "systemctl start service2"});
但是 service2 没有启动。 (虽然命令执行没有任何例外)知道为什么吗?
编辑:
我用sudo systemctl start service1启动了第一个服务。
服务 1 如下所示。
[Unit]
Description=Service 1
[Service]
WorkingDirectory=/usr/test
Environment="DISPLAY=:0"
User=las
ExecStart=/usr/bin/java -jar test.jar
[Install]
WantedBy=graphical.target
服务 2 如下所示
[Unit]
Description=Service 2
[Service]
WorkingDirectory=/usr/test
Environment="DISPLAY=:0"
User=las
ExecStart=/usr/bin/java -jar abc.jar
[Install]
WantedBy=graphical.target
编辑 2
在以某种方式更改代码以查看 Runtime.getRuntime().exec() 的输出流后,我知道它正在返回以下错误。
Failed to start service2.service: Interactive authentication required.
【问题讨论】:
-
哪个用户正在运行应用程序?您收到了哪些错误消息?你做了什么来调试你的程序?
-
@baao 我编辑了问题。
-
问题可能与权限有关。检查 /var/log/auth.log 中是否有错误。
-
@cisk 请参阅编辑 2
标签: java ubuntu-16.04 systemd