从 Bash 脚本重启服务

从 Bash 脚本重启服务

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

相关内容