node.js app é executado a partir da linha de comando, mas dá erros quando executado a partir do trabalho cron na reinicialização no Ubuntu 14.04 LTS

0

Ao iniciar meu aplicativo manualmente usando para sempre, ele funciona bem. Ele é executado em localhost: 8080 e nginx faz o roteamento.

Quando um script cronjob my starter.sh é executado, mas no log para sempre, recebo um erro. Se eu executar o script starter.sh na linha de comando, meu aplicativo também funcionará. Só não funciona quando executado a partir de cronjob . Aqui estão os detalhes:

sempre lista de saída do comando:

data:    [0] pQHz /root/.nvm/v0.10.26/bin/node server.js 953     1077 /root/.forever/pQHz.log 0:0:0:7.90 

starter.sh bash script que é executado na reinicialização:

#!/bin/sh

if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
then
        export PATH=/root/.nvm/v0.10.26/bin/:$PATH
        forever start --spinSleepTime 10000 --sourceDir /root/neet server.js  >> /root/cronlog.txt 2>&1
fi

crontab -e :

@reboot sh /root/neet/starter.sh

starter.sh output:

^[[33mwarn^[[39m:    --minUptime not set. Defaulting to: 1000ms
^[[32minfo^[[39m:    Forever processing file: ^[[90mserver.js^[[39m

para sempre log de ERRO:

Error: ENOENT, no such file or directory './client/index.html'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.readFileSync (fs.js:284:15)
    at self.populateCache (/root/neet/server.js:42:40)
    at self.initialize (/root/neet/server.js:174:14)
    at Object.<anonymous> (/root/neet/server.js:191:6)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
error: Forever detected script exited with code: 8
error: Script restart attempt #1

Esta é a linha de código em meu aplicativo que o erro faz referência a:

self.zcache['index.html'] = fs.readFileSync('./client/index.html');

Estou realmente perplexo a respeito de por que ele não consegue ler o arquivo apenas quando é executado a partir de um cronjob na reinicialização. Alguma ajuda seria muito apreciada.

    
por supb 28.04.2014 / 19:27

2 respostas

0

Quando você executar o script a partir do cron, seu diretório de trabalho atual será o diretório inicial do usuário para quem o script foi chamado. Então, quando seu script está tentando encontrar o caminho relativo ./client/index.html, o arquivo não existe.

    
por user312909 06.08.2014 / 14:39
0

É melhor configurá-lo de maneira independente da versão (provavelmente você tem várias versões de nós instaladas desde que você está usando o nvm).

Este é o mesmo snippet que o instalador nvm adiciona ao seu script /root/.bashrc

@doc Obrigatório para ativar o nó / nvm para um cronjob ()

@doc cron usa por padrão um PATH curto = / usr / bin: / bin e não executa /root/.bashrc (igual a /root/.bashrc)

@doc nvm (gerenciador de versão do nó) não se configura em um trabalho de crontab (isso é feito apenas para shells interativos no meu /root/.bashrc).

export NVM_DIR="/ root / .nvm" # ou talvez ~. / nvm em seu ambiente. [-s "$ NVM_DIR / nvm.sh"] & amp; & amp; . "$ NVM_DIR / nvm.sh" # Isso carrega nvm

    
por Rolf 09.12.2016 / 10:45