我想使用 cmdlet 在 CentOS 上启动 Tomcat 服务:
systemctl start tomcat.service
但我得到了错误
无法启动 Apache ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=203/EXEC)。
并通过命令记录:
Journalctl -xe
是说
Selinux 正在阻止 (artup.sh) 对文件 startup.sh 执行访问
鉴于我可以在我的 CentOS 上启动任何其他服务,我的 tomcat 服务可能有什么问题?
谢谢
SELinux 将可在 ExecStart 中使用的二进制文件限制为设置了 system_u:object_r:bin_t:s0 属性的路径。通常这些是 /usr/bin /usr/sbin /usr/libexec /usr/local/bin 目录。
您需要将脚本移动到此目录之一或更改 selinux 策略以允许 systemd 在所需位置使用二进制文件,如下所示:
restorecon 将更好地“取消修复”上述内容以更新策略,例如
更新
如果 java 二进制文件不在标准位置(自定义 JVM 发行版),那么您还需要为其设置bin_t标签。例如,您的 JVM 安装在 /opt/java 中,然后:
注意:如果没有在单元文件中设置,systemd 会忽略 JAVA_HOME 环境变量。