Я запускаю программу сервера Java, которую нужно запустить с помощью скрипта оболочки. Скрипт должен снова запустить программу Java, если она зависнет или будет остановлена вручную.
Я нашел этот скрипт в сети
while true
do
java -jar program.jar
done
Но это, похоже, не сработало на моем компьютере с Debian 7; он просто показывает:
./start.sh: line 4: syntax error: unexpected end of file
Это было только что опубликовано как скрипт "Linux". Как мне заставить его работать в Debian? Ах да, и важно, чтобы программа запускалась из скрипта, потому что мне нужно регулярно получать доступ к его консоли, если только нет способа сделать так, чтобы он не был скриптом, но все равно позволял мне получать доступ к его консоли.
решение1
Это совершенно допустимый сценарий. Он будет работать где угодно. Если вы получаете синтаксическую ошибку, это потому, что либо была допущена синтаксическая ошибка при копировании/вставке сценария, либо, как предположил Томас в комментариях, ваш файл использует неправильные разделители строк.
Проверить ограничители строк можно с помощью od
следующей команды:
$ od -a foo.sh
0000000 w h i l e sp t r u e nl d o nl sp sp
0000020 sp j a v a sp - j a r sp p r o g r
0000040 a m . j a r nl d o n e nl
0000054
Вы можете видеть здесь, что скрипт в моей системе использует новые строки (это nl
в выводе, сразу после, t r u e
например). Если вместо этого вы видите только возвраты каретки:
0000000 w h i l e sp t r u e cr d o cr sp sp
Или комбинации возврата каретки/новой строки:
0000000 w h i l e sp t r u e cr nl d o cr nl
Тогда вам придется это исправить.
Как только все заработает, вы, возможно, захотите добавить sleep
в свой скрипт команду, например, такую:
while true
do
java -jar program.jar
sleep 1
done
В случае, если program.jar
происходит сбой немедленно, плотный цикл без пауз может потреблять много ресурсов ЦП. Введение небольшой паузы в значительной степени решает эту конкретную проблему.
решение2
Ответ larsks' хорошо написан и обширен. Соответственно, был поставлен плюс.
Небольшая заметка:
Тогда вам придется это исправить.
Существует множество способов конвертировать Windows CR в Linux/Unix LF. Вот несколько из них:
Использование tr
:
tr -d '\r' < infile > outfile
С использованием sed
:
sed 's/^M$//' infile > outfile
Наконец, поскольку вы используете Debian, у вас может быть пакет dos2unix
available. Если вы его установите, это будет просто:
dos2unix myfile