Команда оболочки 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
в сценарии нужно сделать свое дело. Если вам нужен текстовый вывод этой команды, вы можете перенаправить его в файл с >
оператор, и вы можете использовать $?
специальная переменная для проверки кода возврата команды.