Можно остановить аутентификацию по паролю путем конфигурирования ssh демона. Отредактируйте /etc/ssh/sshd_config
файл.
#PasswordAuthentication yes
Не прокомментируйте и измените вышеупомянутую строку на "no"
.
PasswordAuthentication no
Не забывайте перезапускать своего ssh демона!
Это проблема с разрешением на запись. Пользователь tomcat не может создавать файл журнала в том месте, где он пытается их создать. Местоположение, в котором он пытается создать файлы журнала, зависит от того, как вы запускаете tomcat.
Этот фрагмент из вашего журнала привлек мое внимание:
java.io.FileNotFoundException: my-war.log (Permission denied) at java.io.FileOutputStream.open (собственный метод)
Он говорит, что пользователю (tomcat) не разрешено создавать файл my-war.log. Вот различные сценарии:
Upstart с chdir
Upstart первых chdirs до $ CATALINA_HOME. Пользователь tomcat может создавать там файлы. Так что все работает.
Upstart без chdir
Upstart запускается от имени пользователя root, поэтому каталог по умолчанию - /. Пользователь tomcat не может создавать там файлы. Таким образом, вы получаете ошибки отказа в разрешении.
Запуск tomcat из вашего домашнего каталога
Теперь вы запускаете tomcat от имени себя из домашнего каталога. У вас есть разрешение на запись в собственный каталог. Так что все снова работает.
Если вы используете выскочку 1.4 или новее, вы можете использовать раздел setuid вместо su
:
setuid sagecell
Что касается среды, в которой выскочка запускает ваше задание, см.
Обратите особое внимание на то, что даже такие переменные, как $ HOME
, будут , а не , будут установлены по умолчанию при запуске системы. работа как любой пользователь. В качестве альтернативы вы можете рассмотреть пользовательское задание:
Если вы действительно хотите использовать экран GNU, см .:
У меня нет доступа к версии-выскочке с поддержкой setuid
, но в вашем случае я бы поступил именно так.
Похоже на несоответствие среды вопрос. Скорее всего, это переменная среды, которая не устанавливается при запуске из выскочки. Может быть, setuid
не устанавливает $ USER
или $ HOME
?
Поэтому я бы порекомендовал вам сравнить среды. Легким и простым способом было бы изменить ваш сценарий инициализации таким образом и перезапустить задание.
script
env > /tmp/env-upstart.log
chdir $CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh run
end script
Затем также запустите env> /tmp/env-console.log
, когда вы обычно запускаете его с консоли (если вы используете sudo
, сделайте это с помощью sudo env
).
Затем сравните два /tmp/env-upstart.log
и / tmp / env-console. log
(отсортируйте их и откройте с помощью vimdiff
), и должно быть легко найти, какая переменная в env-upstart
отсутствует в другом файле (или установлена на то, чего вы не ожидали).
И если вы все еще получаете ошибки, я бы проверил следующее:
id
, id -r -u
, id -r -g
, id -r -G
, ] id -u
, id -g
и id -G
в обоих случаях. ulimit -a
для сравнения. sh
, а оболочка вашего пользователя, скорее всего, bash
или zsh
. Попробуйте выполнить успешную команду из sh
. Отладьте сценарий : Если вы все еще действительно застряли, запустите catalina.sh
в режиме отладки. Это так же просто, как запустить его из выскочки следующим образом:
exec / bin / sh -x $ CATALINA_HOME / bin / catalina.sh run 2> /tmp/catalina-upstart.log
Затем вы можете сравнить два журнала отладки и, возможно, определить, где два скрипта сделали что-то по-другому.
Да, дело в разрешении. Но не имеет отношения к Upstart. Это потому, что в 'catalina.sh start', то есть в части 'start', настоящая команда:
...
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
Здесь журнал вывода полностью назначен.Пока в части RUN нет "$ CATALINA_OUT". Это приведет к упомянутой выше проблеме с разрешением на запись. А именно, если не назначен конкретный путь к выходному файлу, выходные данные пойдут либо в файл журналов, либо в кодировку your.war. Подобного рода нечеткое назначение журналов приведет к проблемам с неопределенными разрешениями.