解决 systemctl Failed to locate executable : Permission denied
- 解决方案
- 原因分析
- 解决过程
解决方案
chown -R root:root /opt/jeremytsai/server/
chmod +x /opt/jeremytsai/server/bin
restorecon -rv /opt/jeremytsai/server/bin
原因分析
owner id 错乱问题,这个暂时不清楚。
服务无法执行是因为服务经过了移动。一般情况下,mv
不会更新安全上下文,所以当服务移动后,上下文对不上,就被 SELinux 拒绝了。
解决过程
同事搞了一个服务,写了 server.service 添加到 systemctl,提示找不到该服务。Unit server.service could not be found.
删除链接的service文件,查看目录权限,有不少文件所有者出问题了,显示为1000的id。
drwxr-xr-x. 2 1000 1000 4096 May 7 2022 bin
drwxr-xr-x. 2 1000 1000 92 Jun 28 16:18 conf
drwxr-xr-x. 3 root root 35 Jun 28 21:33 data
drwxr-xr-x. 5 1000 1000 4096 May 7 2022 docs
drwxr-xr-x. 2 root root 4096 Jun 28 16:14 lib
-rw-r--r--. 1 1000 1000 11358 May 7 2022 LICENSE.txt
drwxr-xr-x. 2 root root 76 Jun 28 16:24 logs
-rw-r--r--. 1 1000 1000 2084 May 7 2022 NOTICE.txt
-rw-r--r--. 1 1000 1000 2214 May 7 2022 README.md
-rw-r--r--. 1 root root 333 Jun 28 21:32 server.service
修正所有者,由于是本地测试的服务器,直接root
chown -R root:root /opt/jeremytsai/server/
重新链接
ln -s /opt/jeremytsai/server/server.service /etc/systemd/system/server.service
systemctl daemon-reload
重新运行,能找到服务unit了,但是还是执行失败,提示
server.service: Failed to locate executable /opt/jeremytsai/server/bin/server.sh: Permission denied
server.service: Failed at step EXEC spawning /opt/jeremytsai/server/bin/server.sh: Permission denied
查看 SELinux 状态
sestatus -v
显示: SELinux status: enabled
,恢复下执行文件的安全上下文
restorecon -rv /opt/jeremytsai/server/bin
至此,服务正常了。
若文章有误,或你有什么见解,欢迎留言指正和交流。
原创不易,若有所帮助,欢迎点赞、收藏。