Я использую 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.
Вы проверили разрешения выполнения самого сценария? – RealSkeptic
Ну, у меня есть все необходимые разрешения, я думаю, потому что, если я запустил его в bash, например ./test.sh, он отлично справляется с этой задачей. – Sulexa
Да, но это не тот пользователь, который его запускает, не так ли? Tomcat работает под другим пользователем. Пожалуйста, сделайте 'ls -l./Test.sh' и добавьте вывод к вашему вопросу. – RealSkeptic