Ubuntu(14.04)VMでは、起動時に実行したい単純なノードサーバーがあります。次のスクリプトは、./noderoot start
として呼び出されたときに機能しますが、起動時に実行されません。スクリプトは
#!/bin/sh
### BEGIN INIT INFO
# Provides: noderoot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: bootin and rootin
# Description: Start root server on boot
### END INIT INFO
export PATH=$PATH:/usr/bin
export NODE_PATH=$NODE_PATH:/home/azureuser/npm/bin
case "$1" in
start)
forever --sourceDir=/var/www/root -p /var/www/logs app.js
;;
stop)
forever stop --sourceDir=/var/www/root app.js
;;
*)
echo "Usage: /etc/init.d/noderoot {start|stop}"
exit 1
;;
esac
exit 0
このスクリプトは、許可のために/etc/init.d
内に755
とともに存在します。 update-rc.d
を実行してみましたが、次の結果が得られました。
root@linux-dev:~# update-rc.d noderoot defaults 80
Adding system startup for /etc/init.d/noderoot ...
/etc/rc0.d/K80noderoot -> ../init.d/noderoot
/etc/rc1.d/K80noderoot -> ../init.d/noderoot
/etc/rc6.d/K80noderoot -> ../init.d/noderoot
/etc/rc2.d/S80noderoot -> ../init.d/noderoot
/etc/rc3.d/S80noderoot -> ../init.d/noderoot
/etc/rc4.d/S80noderoot -> ../init.d/noderoot
/etc/rc5.d/S80noderoot -> ../init.d/noderoot
root@linux-dev:~# update-rc.d noderoot enable
update-rc.d: warning: start runlevel arguments (none) do not match noderoot Default-Start values (2 3 4 5)
update-rc.d: warning: stop runlevel arguments (none) do not match noderoot Default-Stop values (0 1 6)
Enabling system startup links for /etc/init.d/noderoot ...
Removing any system startup links for /etc/init.d/noderoot ...
/etc/rc0.d/K80noderoot
/etc/rc1.d/K80noderoot
/etc/rc2.d/S80noderoot
/etc/rc3.d/S80noderoot
/etc/rc4.d/S80noderoot
/etc/rc5.d/S80noderoot
/etc/rc6.d/K80noderoot
Adding system startup for /etc/init.d/noderoot ...
/etc/rc0.d/K80noderoot -> ../init.d/noderoot
/etc/rc1.d/K80noderoot -> ../init.d/noderoot
/etc/rc6.d/K80noderoot -> ../init.d/noderoot
/etc/rc2.d/S80noderoot -> ../init.d/noderoot
/etc/rc3.d/S80noderoot -> ../init.d/noderoot
/etc/rc4.d/S80noderoot -> ../init.d/noderoot
/etc/rc5.d/S80noderoot -> ../init.d/noderoot
私が知る限り、これは正常に完了しました。 Sudo service noderoot start
を実行してサービスを開始できます。ただし、マシンの再起動時に実行可能ファイルが実行されていません。何が起こっているかをトラブルシューティングする方法はありますか?これを修正する方法を明らかにする特定のログファイルはありますか?
/var/log/boot.log
(Letiziaが提供する場所)のログを見ると、非常に疑わしい行が見つかりました。
/etc/rc2.d/S80noderoot: 16: /etc/rc2.d/S80noderoot: forever: not found
見つからないコマンドは、パスに問題があることを示しています。案の定、行
export PATH=$PATH:/usr/bin
export NODE_PATH=$NODE_PATH:/home/azureuser/npm/bin
逆転しました。これらの変数を正しいディレクトリを指すように切り替え、cd
を実行する前にスクリプトにforever
を追加することで、実行スクリプトにあった問題を解決したようです。