Команда оболочки 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)

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

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

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

2 ответа

Решение

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

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

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

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

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

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

Просто

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

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

Другие вопросы по тегам