Eu percebi isso. Eu precisava executar o chdir /opt/lib/vendor/node/
e depois retirar essa parte da instrução exec
. Aparentemente exec
não roda nenhum comando shell antigo, ele apenas executa scripts (e argumentos)
Isso está no Ubuntu 10.04 LTS
Então eu tenho um script gulp (correndo através do 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 o alterar, execute automaticamente um comando. O problema inicial que tive foi se eu salvar uma alteração que tem um bug, o "relógio" falha.
Eu pensei que poderia consertar isso executando o script gulp através do upstart e reaparecer se ele falhar. Mas quando eu corro "start gulpwatch" ou até mesmo "sudo start gulpwatch" ele diz que começa e me dá um pid mas na verdade ele apenas inicia e falha 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á o 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, não será reenviado se ele falha devido a um erro de sintaxe no arquivo de observação).
Alguma idéia do motivo do meu script inicial não estar funcionando?
Eu percebi isso. Eu precisava executar o chdir /opt/lib/vendor/node/
e depois retirar essa parte da instrução exec
. Aparentemente exec
não roda nenhum comando shell antigo, ele apenas executa scripts (e argumentos)
Você deve tentar executar a linha antes de executá-la através do script upstart. Quero dizer esta linha:
cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js
O que você obteve quando o executou no servidor? Se você receber um erro em vez de um sucesso, resolva-o primeiro.