Я написал сценарий bash, который периодически проверяет каталог на наличие вновь добавленных файлов .ear и копирует их в каталог развертывания соответствующего сервера JBoss. Перед копированием он проверяет, запущен ли JBoss, и останавливает его, если это так. После копирования файла он удаляет старые файлы .ear, если они есть, и запускает JBoss.
Я пытаюсь выполнить этот сценарий через веб-страницу. т.е. предоставить ссылку для пользователей, нажав на которую, весь процесс будет выполнен. Пока я не могу получить желаемый результат, хотя ручное выполнение его работает.
В журналах http появляется следующая ошибка:
предупреждение] [клиент 127.0.0.1] Тайм-аут ожидания вывода из сценария CGI /var/www/cgi-bin/auto.sh, referer: http: // localhost /
Был бы признателен, если бы кто-нибудь мог пролить свет на то, как это сделать.
Сценарий CGI будет запускаться с идентификатором пользователя веб-сервера, который может не совпадать с идентификатором пользователя, который его тестировал. Вы об этом думали?
Сценарий 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. Мы подумали, что было бы лучше позволить пользователям запускать скрипт вручную, отсюда и такой подход.
Еще раз спасибо. Нагарадж