rc.local запускает файл.sh в неправильном каталоге

В rc.local Я добавил строку для моего файла оболочки, которую я хочу запустить при загрузке:

/direc/tory/<fileName>.sh

Сценарий выглядит так:

#!bin/sh
wget "http://somesite.org/someJava.jar" -O /direc/tory/someJavaFile.jar
java -d64 -Xincgc -Xmx512M -jar /direc/tory/someJavaFile.jar

и я бы предположил, что он будет работать и загружать в /direc/tory/ папка, но она продолжает работать в / и он сохраняет все свои файлы там же.

Что мне нужно сделать, чтобы заставить его работать в /direc/tory/ папка?

2 ответа

Решение

Ваш скрипт не содержит команды для установки текущего каталога, поэтому он работает в том же каталоге, что и процесс, который его вызвал. Когда он выполняется из rc.local, который выполнен из initтекущий каталог является корневым каталогом /,

добавлять cd /direc/tory/ к вашему сценарию. Кстати, обратите внимание, что это #!/bin/sh (#!bin/sh случается, что работает здесь только потому, что вы выполняете свой скрипт из корневого каталога; на это очень плохая идея.)

#!/bin/sh
set -e
cd /direc/tory
wget "http://somesite.org/someJava.jar" -O someJavaFile.jar
java -d64 -Xincgc -Xmx512M -jar someJavaFile.jar

Я также добавил set -e в сценарии. Это останавливает работу в случае сбоя одной из команд. Например, если wget не могу скачать банку, то java не выполнен

#!/bin/sh
wget "http://somesite.org/someJava.jar" -O /direc/tory/someJavaFile.jar
cd /direc/tory
java -d64 -Xincgc -Xmx512M -jar /direc/tory/someJavaFile.jar
Другие вопросы по тегам