Isso está no Ubuntu 10.04 LTS
Então eu tenho um script gulp (rodando no Node) que funciona muito bem quando eu o executo manualmente. Na verdade, ele executa um "watch" em um diretório para que, se algum dos arquivos for alterado, ele execute automaticamente um comando. O problema inicial que tive foi que, se eu salvasse uma alteração que continha um bug, o "relógio" travava.
Achei que poderia consertar isso executando o script gulp por meio do upstart e reaparecendo se ele travasse. Mas quando executo "start gulpwatch" ou mesmo "sudo start gulpwatch" ele diz que inicia e me dá um pid, mas na verdade apenas inicia e trava e não mantém o "watch". Isso é confirmado no syslog onde vejo as linhas:
Mar 24 14:19:19 ubuntu init: gulpwatch main process (2653) terminated with status 2
2072 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2073 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2654) terminated with status 2
2074 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2075 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2655) terminated with status 2
2076 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2077 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2656) terminated with status 2
2078 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2079 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2657) terminated with status 2
2080 Mar 24 14:19:19 ubuntu init: gulpwatch main process ended, respawning
2081 Mar 24 14:19:19 ubuntu init: gulpwatch main process (2658) terminated with status 2
Aqui está meu arquivo inicial
/etc/init/gulpwatch.conf
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 5 10
exec "cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js"
Quando executo os dois comandos listados acima "cd /opt/lib/vendor/node/" e "/usr/bin/gulp --gulpfile gulpfile.js" ele funciona perfeitamente (mas é claro que não irá reaparecer se travar devido devido a um erro de sintaxe no arquivo monitorado).
Alguma idéia de por que meu script inicial não está funcionando?
Responder1
Eu descobri. Eu precisava executar chdir /opt/lib/vendor/node/
e retirar essa parte da exec
instrução. Aparentemente exec
não executa nenhum comando shell antigo, ele apenas executa scripts (e argumentos)
Responder2
Você deve tentar executar a linha antes de executá-la por meio do script inicial. Quero dizer esta linha:
cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js
O que você obteve ao executá-lo no servidor? Se você receber um erro em vez de um sucesso, resolva-o primeiro.