use*_*594 40 linux amazon-ec2 amazon-web-services node.js
有没有简要的指南来解释在实例启动和运行时如何启动应用程序?如果它是通过yum那时安装的服务之一,我想我可以/sbin/chkconfig用来将它添加到服务中.(为了确定,这是正确的吗?)
但是,我只想运行未安装的程序yum.要运行node.js程序,sudo node app.js只要系统启动,我就必须在主目录下运行脚本.
我不习惯使用Amazon Linux AMI,所以我很难找到一种在每次启动时自动运行某些脚本的"正确"方法.
有一种优雅的方式来做到这一点?
mvb*_*fst 21
一种方法是创建一个新贵工作.这样你的应用程序将在Linux加载后启动,如果崩溃将自动重启,你可以通过sudo start yourapp/ sudo stop yourapp/ 启动/停止/重启它sudo restart yourapp.
这是开始的步骤:
1)安装upstart实用程序(如果使用标准的Amazon Linux AMI,可以预先安装):
sudo yum install upstart
Run Code Online (Sandbox Code Playgroud)
对于Ubuntu:
sudo apt-get install upstart
Run Code Online (Sandbox Code Playgroud)
2)为您的节点应用程序创建upstart脚本:
在使用以下代码行/etc/init添加文件yourappname.conf:
#!upstart
description "your app name"
start on started mountall
stop on shutdown
# Automatically Respawn:
respawn
respawn limit 99 5
env NODE_ENV=development
# Warning: this runs node as root user, which is a security risk
# in many scenarios, but upstart-ing a process as a non-root user
# is outside the scope of this question
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1
Run Code Online (Sandbox Code Playgroud)
3)启动你的应用程序 sudo start yourappname
您可以使用forever-service将节点脚本配置为服务,并在引导期间自动启动.以下命令将做必要的,
npm install -g forever-service
forever-service install test
Run Code Online (Sandbox Code Playgroud)
这将永久地将当前目录中的app.js作为服务提供.每次重新启动系统时,该服务都将自动重新启动.此外,当停止时,它将尝试优雅停止.此脚本也提供了logrotate脚本.
Github网址:https://github.com/zapty/forever-service
截至目前,ever-service支持亚马逊Linux,CentOS,Redhat支持其他Linux发行版,Mac和Windows正在开发中.
注意:我是永远服务的作者.
我的 Amazon Linux 实例在 Ubuntu 上运行,我使用 systemd 来设置它。
\n首先您需要创建一个<servicename>.service文件。(就我而言cloudyleela.service)
sudo nano /lib/systemd/system/cloudyleela.service\nRun Code Online (Sandbox Code Playgroud)\n在此文件中键入以下内容:
\n[Unit]\nDescription=cloudy leela\nDocumentation=http://documentation.domain.com\nAfter=network.target\n\n[Service]\nType=simple\nTimeoutSec=0\nUser=ubuntu\nExecStart=/usr/bin/node /home/ubuntu/server.js\nRestart=on-failure\n\n[Install]\nWantedBy=multi-user.target\nRun Code Online (Sandbox Code Playgroud)\n在此应用程序中,node应用程序已启动。您将需要此处的完整路径。我配置为如果出现问题,应用程序应该重新启动。默认情况下,Amazon 使用的实例没有用户密码。
从磁盘重新加载文件,然后您就可以启动服务了。您需要启用它才能将其作为服务激活,并在启动时自动启动。
\nubuntu@ip-172-31-21-195:~$ sudo systemctl daemon-reload\nubuntu@ip-172-31-21-195:~$ sudo systemctl start cloudyleela\nubuntu@ip-172-31-21-195:~$ sudo systemctl enable cloudyleela\nCreated symlink /etc/systemd/system/multi-user.target.wants/cloudyleela.service \xe2\x86\x92 /lib/systemd/system/cloudyleela.service.\nubuntu@ip-172-31-21-195:~$\nRun Code Online (Sandbox Code Playgroud)\n此处提供了一个很棒的适用于 Node.js 的 systemd 教程。
\n在端口 80 上运行 Web 服务器时可能会遇到一些问题。最简单的解决方案实际上是在不同的端口(例如 4200)上运行 Web 服务器,然后将该端口重定向到端口 80。您可以使用以下命令来完成此操作:
\nsudo iptables -t nat -A PREROUTING -i -p tcp --dport 80 -j REDIRECT --to-port 4200\nRun Code Online (Sandbox Code Playgroud)\n不幸的是,这不是持久的,因此每当服务器重新启动时您都必须重复它。更好的方法是将此命令也包含在我们的服务脚本中:
\nExecStartPre添加端口转发ExecStopPost删除端口转发PermissionStartOnly使用 sudo 电源执行此操作所以,像这样:
\n[Service]\n...\nPermissionsStartOnly=true\nExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200\nExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200\nRun Code Online (Sandbox Code Playgroud)\n不要忘记重新加载并重新启动您的服务:
\n[ec2-user@ip-172-31-39-212 system]$ sudo systemctl daemon-reload\n[ec2-user@ip-172-31-39-212 system]$ sudo systemctl stop cloudyleela\n[ec2-user@ip-172-31-39-212 system]$ sudo systemctl start cloudyleela\n[ec2-user@ip-172-31-39-212 system]$\nRun Code Online (Sandbox Code Playgroud)\n前面提到的解决方案提供了很大的灵活性,但设置它确实需要一些时间。对于每一个额外的申请,您都需要再次经历整个过程。当您安装第五个节点应用程序时,您肯定会开始想:“必须有一个快捷方式”。
\nPM2 的优点是只需安装 1 个服务。接下来是 PM2 管理实际的应用程序。
\n即使 PM2 的初始设置也很简单,因为它会自动为您安装 pm2 服务。
\nnpm install pm2 -g\nRun Code Online (Sandbox Code Playgroud)\n添加新服务更加容易:
\npm2 start index.js --name "foo"`. \nRun Code Online (Sandbox Code Playgroud)\n当一切正常运行后,您可以保存设置,使其在重新启动时自动启动。
\npm2 save\nRun Code Online (Sandbox Code Playgroud)\n如果您想了解所有正在运行的节点应用程序的概述,\n您可以运行pm2 list
PM2 还提供在线(基于网络)仪表板来远程监控您的应用程序。不过,您可能需要许可证才能访问某些仪表板功能(恕我直言,这价格有点高)。
\n您可以创建一个脚本,可以启动和停止您的应用程序并将其放在/etc/init.d中; 使脚本遵循chkconfig的约定(如下),然后使用chkconfig将其设置为在启动其他服务时启动.
您可以从/etc/init.d中选择一个现有脚本作为示例; 本文介绍了这些要求,基本上是:
设置脚本后,即可使用
chkconfig --add yourscript
chkconfig yourscript on
Run Code Online (Sandbox Code Playgroud)
你应该好好去.(某些发行版可能要求您手动将脚本符号链接到/etc/init.d/rc.d,但我相信您的AWS发行版会在您启用脚本时为您执行此操作.
| 归档时间: |
|
| 查看次数: |
51196 次 |
| 最近记录: |