rc.local executa o arquivo .sh no diretório errado

3

Em rc.local , adicionei uma linha ao meu arquivo de shell que quero executar na inicialização:

/direc/tory/<fileName>.sh

O script é assim:

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

e eu diria que ele seria executado e carregado na pasta /direc/tory/ , mas continuará sendo executado em / e também salvará todos os seus arquivos.

O que preciso fazer para forçar a execução na pasta /direc/tory/ ?

    
por Fate 11.05.2012 / 23:04

2 respostas

4

Seu script não contém nenhum comando para definir o diretório atual, portanto ele é executado no mesmo diretório do processo que o invocou. Quando executado a partir de rc.local , executado a partir de init , o diretório atual é o diretório raiz / .

Adicione cd /direc/tory/ ao seu script. A propósito, note que é #!/bin/sh ( #!bin/sh funciona aqui apenas porque você está executando seu script a partir do diretório raiz; é uma péssima idéia confiar nisso.)

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

Também adicionei set -e no script. Isso faz com que pare se um dos comandos falhar. Por exemplo, se wget não puder fazer o download do jar, então java não será executado.

    
por Gilles 11.05.2012 / 23:11
1
#!/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
    
por Matt Barnes 11.05.2012 / 23:10