Новомодный сценарий по сравнению с командной строкой: почему это различие в поведении?

Можно остановить аутентификацию по паролю путем конфигурирования ssh демона. Отредактируйте /etc/ssh/sshd_config файл.

#PasswordAuthentication yes

Не прокомментируйте и измените вышеупомянутую строку на "no".

PasswordAuthentication no

Не забывайте перезапускать своего ssh демона!

2
задан 22 February 2013 в 08:27
4 ответа

Это проблема с разрешением на запись. Пользователь 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 от имени себя из домашнего каталога. У вас есть разрешение на запись в собственный каталог. Так что все снова работает.

5
ответ дан 3 December 2019 в 08:54

Если вы используете выскочку 1.4 или новее, вы можете использовать раздел setuid вместо su :

setuid sagecell

Что касается среды, в которой выскочка запускает ваше задание, см.

Обратите особое внимание на то, что даже такие переменные, как $ HOME , будут , а не , будут установлены по умолчанию при запуске системы. работа как любой пользователь. В качестве альтернативы вы можете рассмотреть пользовательское задание:

Если вы действительно хотите использовать экран GNU, см .:

0
ответ дан 3 December 2019 в 08:54

У меня нет доступа к версии-выскочке с поддержкой 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 отсутствует в другом файле (или установлена ​​на то, чего вы не ожидали).

Обновление 1

И если вы все еще получаете ошибки, я бы проверил следующее:

  • Разрешения пользователей : эффективные / реальные идентификаторы пользователей могут отличаться. Сравните вывод 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
    

    Затем вы можете сравнить два журнала отладки и, возможно, определить, где два скрипта сделали что-то по-другому.

2
ответ дан 3 December 2019 в 08:54

Да, дело в разрешении. Но не имеет отношения к 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. Подобного рода нечеткое назначение журналов приведет к проблемам с неопределенными разрешениями.

1
ответ дан 3 December 2019 в 08:54

Теги

Похожие вопросы