Como autostart node forever e use spawn () como sudo no Ubuntu?

0

Meu aplicativo gera periodicamente um raspador CasperJS :

spawn(CASPER_PATH, 
        [SCRIPTS_PATH + fileName, '--ssl-protocol=any', '--user='+user, '--scrapeId='+scrapeId, '--pass='+pass], 
        { detached: true }, 
        function (err, stdout, stderr) {});

O comando spawn() precisa ser executado para ser algo assim:

/usr/local/bin/casperjs /home/custom_user/casper-scripts/script.coffee --ssl-protocol=any --user=username123 --pass=pass123 --scrapeId=some_id_123

Eu estou tentando usar para sempre para iniciar automaticamente o servidor do nó, e pingar quando precisar do raspar.

Funciona muito bem quando eu executo o node server.js como usuário logado que criei ou como usuário root. Também funciona muito bem quando executo forever start server.js , mas somente se eu fizer isso como usuário root - caso contrário, spawn() não fará nada.

Eu tentei adicionar forever start (com caminhos absolutos e relativos, é claro) para crontab tanto para a raiz quanto para o usuário normal. Em ambos os casos, o servidor é executado em portas, logs, solicitações aceitas, mas não gera casperjs.

Eu tentei adicionar forever start server.js a /etc/rc.local mesmo - ainda nada. O servidor está executando, registrando, funcionando muito bem, mas a única maneira que o forever é capaz de executar spawn () é se Eu explicitamente executá-lo enquanto estiver logado como usuário root.

No final da corda aqui ...

Como faço para dar sempre os privilégios na inicialização para gerar um binário de casperjs? Preciso alterar o arquivo sudoers de alguma forma? O fato de a pasta ser chown ed por usuário não raiz é relevante?

EDITAR:

Eu não sei porque eu não pensei em checar o que o spawn estava relatando então eu comecei para sempre através do crontab do usuário não-root e adicionei o seguinte depois de var sP = spawn() :

sP.stdout.on('data', function(data) { console.log('stdout', data.toString('utf8')); });
sP.stderr.on('data', function(data) { console.log('stderr', data.toString('utf8')); });
sP.stdout.on('close', function(code) { console.log('close', code); });

Saída:

stdout Fatal: [Errno 2] No such file or directory; did you install phantomjs?

close false

CasperJS é um wrapper para o PhantomJS. Isso é estranho, já que eu instalei ambos no sistema:

casperjs --version 1.1.0-beta3 %código% 1.9.8

Parece que o crontab não está ciente da existência do phantomjs em / usr / local / bin?

EDIT 2:

O Crontab agora está assim:

@reboot PHANTOMJS_EXECUTABLE=/usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs NODE_ENV=production /usr/bin/forever start /home/custom_user/endpoints-server-linux/server.js

O erro phantomjs desapareceu, mas nenhum dado com o casper sendo executado.

    
por dsp_099 29.01.2016 / 07:39

1 resposta

1

Você poderia tentar dar o caminho completo para para sempre ao iniciá-lo para rc.local. Pode ser que o $ PATH não esteja definido como é quando você está logado.

Se isso falhar, existe algum log que para sempre produz? Você pode tee para a saída onde você executa o comando, como:

/usr/local/bin/forever start <full path to>/server.js | tee /tmp/forever-start.log

    
por Anders Olsson 29.01.2016 / 07:57