Назад | Перейти на главную страницу

Как выполнить сценарий оболочки bash через ссылку в браузере

Я написал сценарий bash, который периодически проверяет каталог на наличие вновь добавленных файлов .ear и копирует их в каталог развертывания соответствующего сервера JBoss. Перед копированием он проверяет, запущен ли JBoss, и останавливает его, если это так. После копирования файла он удаляет старые файлы .ear, если они есть, и запускает JBoss.
Я пытаюсь выполнить этот сценарий через веб-страницу. т.е. предоставить ссылку для пользователей, нажав на которую, весь процесс будет выполнен. Пока я не могу получить желаемый результат, хотя ручное выполнение его работает.
В журналах http появляется следующая ошибка:

предупреждение] [клиент 127.0.0.1] Тайм-аут ожидания вывода из сценария CGI /var/www/cgi-bin/auto.sh, referer: http: // localhost /

Был бы признателен, если бы кто-нибудь мог пролить свет на то, как это сделать.

  1. Сценарий CGI будет запускаться с идентификатором пользователя веб-сервера, который может не совпадать с идентификатором пользователя, который его тестировал. Вы об этом думали?

  2. Сценарий CGI должен напечатать заголовок и какой-то вывод вроде «Успех, спасибо за использование auto.sh».

 echo "Content-type: text/plain"
 echo 
 echo "Success, thanks for using auto.sh"

Если пытаться делать CGI из оболочки слишком неуклюже, оберните это небольшим количеством perl или python, у которых есть библиотеки для работы с CGI.

Альтернативный подход - оставить токен в столбце файла или базы данных, который сообщает ему о запуске, а затем либо активировать его из cron, либо постоянно запускать его и искать токен.

Кроме того, в зависимости от того, как настроен веб-сервер, ваш CGI может работать только до истечения времени ожидания ...

Большое спасибо, ~ drpaulbrewer и другие. Это определенно была проблема с разрешениями. Нам удалось заставить его работать, предоставив необходимые разрешения для apache в файле sudoers. Также был получен стандарт '[error] [client 127.0.0.1] в обязательном порядке быть tty, referer: http: // localhost /'ошибка в журналах, от которой я избавился, исключив apache из раздела' Defaults requiretty 'в файле sudoers.

Хотя я изначально думал о запуске скрипта как cronjob, он не был реализован, так как мы запускаем его в тестовой среде и у нас одновременно работает несколько экземпляров JBoss. Мы подумали, что было бы лучше позволить пользователям запускать скрипт вручную, отсюда и такой подход.

Еще раз спасибо. Нагарадж