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