我创建了一个脚本,用于部署必须在启动时运行的java程序。我编写了一个由脚本自定义的litte模板,并将其添加到/etc/systemd/system/ServerName.service
[Unit]
Description= ServerName Java Daemon
[Service]
ExecStart=/usr/lib/jvm/java/bin/java -jar PathToFile.jar
User=psadmin
[Install]
WantedBy=multi-user.target # Similar to runlevel 5
我已经在visudo中添加了用户psadmin来运行systemctl而没有提供密码。这对于使用sudo systemctl start ServerName.service启动服务非常合适。然后脚本重新加载systemctl守护进程“sudo systemctl daemon-reload”。
当脚本使用systemctl enable ServerName.service执行部件时,我得到“无法发出方法调用:访问被拒绝”的回复。
当我在相同的用户上下文中手动执行此操作时,我得到的回复是“无法发出方法调用:无效的参数”,但它可以正常工作并且服务已启用。 谢谢你的任何提示!
答案 0 :(得分:1)
Systemctl受到非特权用户的保护。您必须修改sudoers以允许此用户或组(用户所属的组)执行命令。
对于ServerOverflow来说,这也是一个更好的问题。 请参阅sudo的联机帮助页
%wheel = /usr/bin/systemctl restart ServerName.service
%wheel = /usr/bin/systemctl stop ServerName.service
%wheel = /usr/bin/systemctl start ServerName.service
%wheel = /usr/bin/systemctl status ServerName.service