これはUbuntu 10.04 LTSです
そこで、手動で実行するとうまく動作する gulp スクリプト (Node で実行) を作成しました。このスクリプトは実際にディレクトリで「監視」を実行し、ファイルが変更されると自動的にコマンドを実行します。最初に発生した問題は、バグのある変更を保存すると「監視」がクラッシュすることです。
upstart で gulp スクリプトを実行し、クラッシュした場合に再起動することでこれを修正できると考えました。しかし、「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
これが私のアップスタートファイルです
/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"
上記の 2 つのコマンド「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
サーバー上で実行したときに何が得られましたか? 成功ではなくエラーが発生した場合は、まずそれを解決してください。