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.