![Grub2 错误 grub-boot-success.service:主进程已退出,代码=exited,状态=1/FAILURE](https://linux22.com/image/790930/Grub2%20%E9%94%99%E8%AF%AF%20grub-boot-success.service%EF%BC%9A%E4%B8%BB%E8%BF%9B%E7%A8%8B%E5%B7%B2%E9%80%80%E5%87%BA%EF%BC%8C%E4%BB%A3%E7%A0%81%3Dexited%EF%BC%8C%E7%8A%B6%E6%80%81%3D1%2FFAILURE.png)
我正在运行带有 Alma Linux 8.8.0 的 VPS,带有 WHM/cPanel 和大约 60 个用户、多个网站等。
我经常在服务器的“消息”日志中看到这些内容:
Nov 16 11:39:01 ark grub2-set-bootflag[312712]: Error setuid(0) failed: Operation not permitted
Nov 16 11:39:01 ark systemd[312226]: grub-boot-success.service: Main process exited, code=exited, status=1/FAILURE
Nov 16 11:39:01 ark systemd[312226]: grub-boot-success.service: Failed with result 'exit-code'.
这似乎是 grub 过去的一个已知问题 - 我找到了 2020 年的这个开发者讨论,其中讨论了解决方案:
https://bugs.mageia.org/show_bug.cgi?id=27269
他们建议更改文件中的一行
/usr/lib/systemd/user/grub-boot-success.service
从:
ExecStart=/usr/sbin/grub2-set-bootflag boot_success
到:
ExecStart=/usr/bin/pkexec /usr/sbin/grub2-set-bootflag boot_success
但后来的讨论中说,这个解决方案会触发密码输入请求(这对我来说没有用,因为这是一个系统运行命令)并继续提到这个错误已经解决。
我的系统正在运行 GRUB2:
[root@myserver systemd]# grub2-install --version
grub2-install (GRUB) 2.03
问题:
a) 我是否应该将 Grub 升级到 2.06(我相信这是最新版本)?如果是,我该如何安全地执行此操作 - 当然,我不希望任何事情冒着我的系统无法启动的风险。
b) 我是否应该将这些文件编辑为“正确”?替代行,或者这只会使系统需要输入密码?(我尝试过并在日志中看到“主进程已退出,代码=退出,状态=127 / n / a”表示“未找到命令”)
c) 我是不是应该什么都不做就没事了?
非常感谢!
答案1
我已经为此构建了一个修复程序,虽然它并不“理想”,而且我不知道是否需要它,但它有效(并从日志中删除了错误)。
在文件中:
/usr/lib/systemd/user/grub-boot-success.service
改变:
ExecStart=/usr/sbin/grub2-set-bootflag boot_success
到:
ExecStart=touch ./grubbootsuccessflag
这是因为 grub-boot-success.service 是在登录用户的文件系统中运行的,因此在运行此服务之前会触发两分钟的超时。然后会在用户主目录中创建此“标志”文件,该文件归该用户所有。
然后创建一个 cron 任务,每分钟以 root 身份运行以下批处理脚本:
removed=$(find /home/ -name 'grubbootsuccessflag' -delete -print)
if [[ -n "$removed" ]]; then
/usr/sbin/grub2-set-bootflag boot_success
echo "BOOT SUCCESS $removed"
fi
(谢谢https://stackoverflow.com/users/9072753/kamilcuk对于此脚本)
该脚本在所有用户主目录(以及效率低下的“/home/”中的所有其他目录)中搜索标志,如果找到则删除,然后由具有完全 setuid(0) 权限的 root 运行“服务”中不起作用的命令。
笔记:
- 这可以变得更有效率——每分钟搜索整个“主”文件夹和子文件夹来查找此匹配项并不理想。
- 我不确定实际服务器本身的重新启动是否也会在“home”文件夹以外的某个地方创建“grubbootsuccessflag”。