Это на Ubuntu 10.04 LTS
Итак, у меня есть скрипт gulp (работающий через Node), который отлично работает, когда я запускаю его вручную. Он фактически запускает "watch" в каталоге, так что если какой-либо из файлов изменится, он автоматически запустит команду. Первоначальная проблема, с которой я столкнулся, заключалась в том, что если я сохранял изменение, содержащее ошибку, "watch" вылетал.
Я думал, что смогу исправить это, выполнив скрипт gulp через upstart и перезапустив его, если он зависнет. Но когда я запускаю "start gulpwatch" или даже "sudo start gulpwatch", он говорит, что запускается и дает мне pid, но на самом деле он просто запускается и зависает и не поддерживает "watch". Это подтверждается в syslog, где я вижу строки:
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
Вот мой файл upstart
/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"
Когда я запускаю две команды, перечисленные выше, «cd /opt/lib/vendor/node/» и «/usr/bin/gulp --gulpfile gulpfile.js», они работают отлично (но, конечно, не восстановятся, если произойдет сбой из-за синтаксической ошибки в файле наблюдения).
Есть идеи, почему мой скрипт upstart не работает?
решение1
Я разобрался. Мне нужно было запустить chdir /opt/lib/vendor/node/
, а затем убрать эту часть из exec
оператора. По-видимому, exec
не запускает старые команды оболочки, а только выполняет скрипты (и аргументы)
решение2
Вам нужно попробовать выполнить строку перед тем, как выполнять ее через скрипт upstart. Я имею в виду эту строку:
cd /opt/lib/vendor/node/;/usr/bin/gulp --gulpfile gulpfile.js
Что вы получили, когда запустили его на сервере? Если вы получили ошибку вместо успеха, сначала устраните ее.