是否有一个简短的指南,以说明如何在实例启动和运行启动一个应用程序? 如果是通过安装在服务的一个yum
话,我想我可以使用/sbin/chkconfig
将其添加到该服务。 (使它肯定,是正确的吗?)
不过,我只是想运行哪个不是通过安装程序yum
。 要运行的node.js程序,我将不得不运行脚本sudo node app.js
在家目录每当系统启动。
我不习惯亚马逊的Linux AMI所以我有一点麻烦找到一个“正确”的方式,在每次启动时自动运行一些脚本。
有一种优雅的方式来做到这一点?
一种方法是创建一个暴发户的工作。 这样,你的应用程序将启动,一旦Linux的加载,如果它崩溃会自动重新启动,你就可以开始/停止/启动由它sudo start yourapp
/ sudo stop yourapp
/ sudo restart yourapp
。
下面是开始步骤:
1)安装新贵实用程序(可预先安装,如果你使用一个标准的Linux亚马逊AMI):
sudo yum install upstart
对于Ubuntu的:
sudo apt-get install upstart
2)为您的节点的应用程序创建脚本新贵:
在/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
3)启动您的应用程序sudo start yourappname
您可以使用永久服务的部署节点脚本作为服务和启动时自动启动。 下面的命令将做要紧,
npm install -g forever-service
forever-service install test
这就会把app.js在当前目录中通过一个永远的服务。 该服务将自动重启,每次重新启动系统。 也停止时,它会尝试正常停止。 该脚本规定的logrotate脚本也是如此。
Github上网址: https://github.com/zapty/forever-service
截至目前,永远服务支持亚马逊的Linux,CentOS的,对于其他Linux发行版红帽的支持,Mac和Windows都在作品..
注:我永远服务的作者。
快速解决方案,你会从开始您的应用程序/etc/rc.local
; 只需添加您的命令在那里。
但是,如果你想要去的优雅的方式,你必须打包在rpm文件您的应用程序,有去启动脚本/etc/rc.d
,这样就可以使用chkconfig
关于您的应用程序,然后安装rpm您的实例。
也许这还是这帮助。 (或只是谷歌“创造的rpm包”)
您可以创建一个脚本,可以启动和停止的应用程序,并将其放置在/etc/init.d; 使脚本坚持的chkconfig的约定(如下图),然后使用命令行工具来设置它,当其他服务开始启动。
你可以选择从/etc/init.d中作为例子来使用现有的脚本; 本文介绍了要求,这基本上是:
- 标识所需的外壳可执行脚本(即#!/斌/庆典)
- 形式#chkconfig的的注释:其中往往是345,startprio指示了服务的顺序启动,并stopprio就是在服务才能停止。 我一般选择那些已经存在类似的服务,并以此作为对这些价值导向(即,如果你有一个网站相关的服务,开始在同一水平的httpd,具有类似的启动和停止的优先级)。
一旦你的脚本设置,您可以使用
chkconfig --add yourscript
chkconfig yourscript on
你应该是好去。 (一些发行版可能需要您手动符号链接到脚本/etc/init.d/rc.d,但我相信,当你使脚本您的AWS发行会为你做的。
使用弹性魔豆:)提供了自动缩放,SSL终止,蓝/绿部署,支持等
我的亚马逊的Linux实例在Ubuntu上运行,而我用systemd来进行设置。
首先,你需要创建一个<servicename>.service
文件。 (在我的情况cloudyleela.service
)
sudo nano /lib/systemd/system/cloudyleela.service
键入此文件中的以下内容:
[Unit]
Description=cloudy leela
Documentation=http://documentation.domain.com
After=network.target
[Service]
Type=simple
TimeoutSec=0
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/server.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
在这种应用中的node
启动应用程序。 在这里你会需要一个完整的路径。 我配置了,如果出现错误的程序应该简单地重新启动。 亚马逊使用的情况下,为他们的用户在默认情况下没有密码。
重新从磁盘上的文件,然后你就可以开始你的服务。 您需要启用它,使之积极作为一种服务,它在启动时自动启动。
ubuntu@ip-172-31-21-195:~$ sudo systemctl daemon-reload
ubuntu@ip-172-31-21-195:~$ sudo systemctl start cloudyleela
ubuntu@ip-172-31-21-195:~$ sudo systemctl enable cloudyleela
Created symlink /etc/systemd/system/multi-user.target.wants/cloudyleela.service → /lib/systemd/system/cloudyleela.service.
ubuntu@ip-172-31-21-195:~$
对于node.js的教程伟大systemd,请点击这里 。
如果你运行一个Web服务器:
你可能会在80端口上运行你的web服务器的一些问题和简单的解决方案,实际上是一个不同的端口(例如4200)上运行您的Web服务器,然后重定向端口到端口80。你可以用下面的命令做到这一点:
sudo iptables -t nat -A PREROUTING -i -p tcp --dport 80 -j REDIRECT --to-port 4200
不幸的是,这是不是持久的 ,所以你必须重复它时,您的服务器重新启动。 更好的方法是在我们的服务脚本还包括以下命令:
-
ExecStartPre
添加端口转发 -
ExecStopPost
删除端口转发 -
PermissionStartOnly
与须藤功率做到这一点
所以,这样的事情:
[Service]
...
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200
ExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200
不要忘了重新加载,然后重新启动服务:
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl daemon-reload
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl stop zbaduk.ishida
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl start zbaduk.ishida
[ec2-user@ip-172-31-39-212 system]$
您可以使用screen
。 运行crontab -e
,并添加这一行:
@reboot screen -d -m bash -c "cd /home/user/yourapp/; node app"
一直在使用永远在AWS上,它做得很好。 安装使用
[sudo] npm install forever -g
要添加应用程序的使用
forever start path_to_application
并停止应用程序使用
forever stop path_to_application
这是一个有用的文章,帮助我设置它。
文章来源: How can I automatically start a node.js application in Amazon Linux AMI on aws?