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