Я хочу запустить службу Tomcat в CentOS с помощью командлета:
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 использовать двоичные файлы в нужном месте, поскольку:
chcon -R -t bin_t /opt/tomcat/bin/
restorecon «отменит» вышеперечисленное лучше, чтобы обновить политику, например.
semanage fcontext -a -t bin_t "/opt/tomcat/bin(/.*)?"
restorecon -r -v /opt/tomcat/bin
ОБНОВЛЕНИЕ
Если двоичный файл java не находится в стандартном расположении (пользовательского дистрибутива JVM), вам также необходимо установить для него метку bin_t . Например, если ваша JVM установлена в /opt/java, тогда:
semanage fcontext -a -t bin_t "/opt/java/bin(/.*)?"
restorecon -r -v /opt/java/bin
УВЕДОМЛЕНИЕ:systemd игнорирует переменную среды JAVA_HOME, если она не установлена в файле модуля.