myservice
我正在尝试从作为守护进程运行的服务重新启动服务。
我创建了一个名为的文件myapprestart
,/etc/sudoers.d/
如下所示
%myuser ALL=NOPASSWD: /bin/systemctl restart myservice
%myuser ALL=NOPASSWD: /bin/systemctl start myservice
%myuser ALL=NOPASSWD: /bin/systemctl stop myservice
守护myapprestart.service
进程作为定时单元成功运行,/home/myuser/restart.sh
但总是在 journalctl 中出现以下行失败
failed to stop myservice.service: Interactive authentication required.
脚本文件/home/myuser/restart.sh
包含如下行
systemctl stop myservice
systemctl start myservice
我需要一些关于我做错的事情的指点。我至少看过四个类似的问题,但出于某种原因,这种情况似乎不起作用。我正在使用 ubuntu 19.02。
答案1
您的脚本restart.sh
使用systemctl
命令,它是 systemd 的一部分;由于此命令的角色需要 root 权限,因此您需要使用该sudo
命令才能使用它(并且您的用户必须被称为sudoers
授权的 sudo 用户)。您的命令如下:
sudo /home/myuser/restart.sh
/home/myuser/restart.sh
只是启动脚本的绝对路径,与在文件夹sudo ./restart.sh
内执行的操作相同/home/myuser/
此外,OP 在评论中提到了这一点,您也可以sudo
使用绝对路径调用/usr/bin/sudo
(与)/usr/bin/sudo apt update
相同sudo apt update