2016-11-02 8 views
0

Я использую Tomcat7, и я попытался запустить sh-скрипт из tomcat. Мой скрипт должен создавать новый файл и записывать вещи. Если я запускаю свой скрипт, например ./test.sh, он отлично работает, но если я использую tomcat для запуска этого сценария, я получаю ошибку разрешения, отказавшуюся во время выполнения скрипта, не имеет права на запись. Это мой Java-код:Разрешение сценария Tomcat sh

 String[] fixCmd = new String[] { path }; 
    Process start = Runtime.getRuntime().exec(fixCmd); 

    // monitor standard error to find out what's wrong 
    BufferedReader r = new BufferedReader(new InputStreamReader(start.getErrorStream())); 
    String line = null; 
    while ((line = r.readLine()) != null) { 
     System.out.println(line); 
    } 

и мой shellScript:

echo test >> test.txt 

Я пытался использовать ProcessBuilder, но он не работал слишком.

Я попытался изменить разрешение папки со всем решением, которое нашел, и ничего не работало. Когда exec Tomcat запускал скрипт как root, у него есть все необходимые разрешения. Я передал все разрешения на папку для пользователя tomcat7 в случае, но ничего не изменилось. У меня есть другие скрипты java, которые создают и записывают файл на сервере, поэтому я уже успел изменить право, чтобы tomcat записывал вещи, и это работает, поэтому я действительно не знаю, в чем проблема скрипта.

Любые идеи?

Edit 1: Выход ls -l ./test.sh сделал это:

-rwxr-xr-x 1 tomcat7 tomcat7 165 nov. 2 16:12 ./test.sh 

Я вошел как корень и я красный кот рассматривается как корень тоже.

Редактировать 2 Проблема решена: Специалист объяснил мне, что моя проблема связана с проблемой безопасности, поскольку tomcat - это веб-сервер, поэтому безопасность не позволяет иметь разрешение на сценарий sh для записи. Поэтому я изменил свой подход к проблеме, и я прочитаю вывод sh-скрипта в java и напишу свой файл из jave.

+0

Вы проверили разрешения выполнения самого сценария? – RealSkeptic

+0

Ну, у меня есть все необходимые разрешения, я думаю, потому что, если я запустил его в bash, например ./test.sh, он отлично справляется с этой задачей. – Sulexa

+0

Да, но это не тот пользователь, который его запускает, не так ли? Tomcat работает под другим пользователем. Пожалуйста, сделайте 'ls -l./Test.sh' и добавьте вывод к вашему вопросу. – RealSkeptic

ответ

0

Доступ к файлам в файловой системе контейнера является сложным и не рекомендуется (imo). Думаю: ваша проблема не имеет ничего общего с правами на файловую систему, но с разрешениями веб-контейнера (здесь: tomcat).

См Accessing linux local file system from java web application

или How to access external folder (Web Server)?

+0

Хорошо, что сценарий sh находится в моей папке webapps, поэтому я могу получить к нему доступ и запустить его, это действительно просто сценарий, который, кажется, не имеет разрешения, когда он запускается из tomcat, когда я запускаю его из bash, как root, который он получил нет проблем с запуском – Sulexa

+0

, вы получаете доступ к файлу text.txt внутри скрипта. Имеются ли у вас надлежащие разрешения на каталог (для этого необходимы разрешения на создание файлов, т. Е. Разрешения на редактирование каталога), и если они уже существуют, в файле? –

+0

Когда я бегу от tomcat, я получаю «не могу создать test.txt: Permission denied» Но когда я запускаю скрипт из оболочки, я не вижу проблемы с разрешением. text.txt имеют все необходимые разрешения, я просто попробовал chmod 777, но он ничего не менял, когда разрешалось разрешение. – Sulexa