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

Команда оболочки bash отлично работает в командной строке, но не в моем сценарии .sh?

Я пытаюсь написать сценарий, который перезапускает tomcat, но не могу понять, в чем моя проблема.

если я выполню следующую команду в командной строке, она будет работать нормально:

/usr/local/etc/rc.d/tomcat7 start

Однако внутри скрипта myshell.sh я попытался выполнить ту же команду с обратными кавычками и без них:

rc=`/usr/local/etc/rc.d/tomcat7 start`
rc=/usr/local/etc/rc.d/tomcat7 start
rc=$(/usr/local/etc/rc.d/tomcat7 start)

но ничего не происходит, и я не получаю никаких сообщений об ошибках.

Что он может запускать из командной строки, но не внутри моего сценария оболочки?

Заранее спасибо.

Поскольку вы сказали, что столкнулись с этой проблемой при запуске скрипта через cron, вот пара идей.

99% проблем, возникающих при запуске скриптов через cron, связаны с $PATH. Путь, используемый cron, очень минимален. Вы указываете полный путь к сценарию инициализации, поэтому я не ожидал, что это будет проблемой. Ваш скрипт больше ничего не делает?

Кроме того, в вашем скрипте, если вы используете bash, вы можете изменить первую строку (shebang) и добавить вторую строку следующим образом

#!/bin/bash -x
exec &>/tmp/script.log

Это включит отладку при запуске скрипта cron. Он также будет записывать весь вывод сценария в /tmp/script.log. Как только вы решите проблему, вы можете вернуть это обратно.

Почему вы пытаетесь присвоить это переменной?

Просто

/usr/local/etc/rc.d/tomcat7 start

в сценарии должно помочь. Если вам нужен текстовый вывод этой команды, вы можете перенаправить его в файл с > оператор, и вы можете использовать $? специальная переменная для проверки кода возврата команды.