AWS上のbot起動などで常時node.jsを実行させるための設定です。
簡単に設定のできるforever.jsを使いました。
OS起動時の自動実行が地味にめんどくさくなってた。
インストールと実行
1 2 |
npm i forever -g forever start xxx.js |
基本コマンドやオプションは公式で。
OS起動時の自動実行
AWSでNode.jsのブループリントを使ってインスタンス作成すると、
Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-1074-aws x86_64)
で作成されるのでsystemctlを使う必要があります。
rc.localの設定
古いバージョンのUbuntuならこれだけでいいはず。絶対パスで記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//コマンドのフルパスを確認 which forever //以前のバージョンと同じように設定ファイルをいじる //「i」で編集開始、「ESC」後に「:wq」で保存 sudo vi /etc/rc.local //コメントとexit 0の間に以下のようなコマンドを追加 /opt/bitnami/nodejs/bin/forever start --minUptime 2000 --spinSleepTime 2000 /home/bitnami/xxx/yyy.js //プログラムに相対パスがある場合にはカレントディレクトリを移動する cd /home/bitnami/xxx/ /opt/bitnami/nodejs/bin/forever start --minUptime 2000 --spinSleepTime 2000 yyy.js |
systemctlの設定
サービスを作成して登録します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//新規作成でサービス定義する sudo vi /etc/systemd/system/rc-local.service //----------ここから [Unit] Description=/etc/rc.local compatibility [Service] Type=oneshot ExecStart=/etc/rc.local # disable timeout logic TimeoutSec=0 #StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target //-----------ここまで //サービス有効化 sudo systemctl enable /etc/systemd/system/rc-local.service //サービス一覧の確認 systemctl list-unit-files --type=service //ステータス確認 systemctl status rc-local.service |
エラーメッセージ:/usr/bin/env: ‘forever’: No such file or directory
forever
コマンドを絶対パスで指定する
エラーメッセージ:/usr/bin/env: ‘node’: No such file or directory
ソフトリンクを張る(本体パスが違う時はwhich
コマンドで調べる)
1 |
sudo ln -s /opt/bitnami/nodejs/bin/node /usr/bin/node |
実行ユーザーの変更
デフォルトだとrootが実行するのでブラウザsshするときに使いにくかったりする。
ユーザーを変えるにはサービス定義にUser
を追記する。
1 2 3 |
[Service] ... User=user_name |