关于nodejs的web server如何设置开机启动,定时重启和自动备份数据。
发布于 2年前 作者 xiaojue 4805 次浏览

今天弄了一下午的开机启动,终于弄好了,虽然不太完美。。但是解决思路给一下吧。

开始是在/etc/rc.local 里增加了nginx,redis,mongodb的开机启动脚本,这里不仔细说。都没问题。

然后是下面这句

forever start /path/app.js

发现不生效,经过无数次的reboot。。。发现forever在rc.local里是不会执行的,相关的google搜索看了一圈,都是使用monit,monit的设置并不复杂,不过这里并不是用monit解决的。

而是用chkconfig来把自己的app包装成了系统service开机启动解决的。

这个方法已经在自己机器和服务器上都跑成功了,ubuntu12.04和cenos5.5

首先在/etc/init.d/下建立一个文件 拿我的兔耳为例子:

代码如下:https://github.com/xiaojue/tuer.me/blob/master/tuer

chkconfig:345 99 01

description:tuer

这两行在centos上需要加,ubuntu不需要。。 其中的345是level,设置5为开机启动,99为启动优先级,01为关闭服务时关闭优先级,从0到99,是0的权重最高。

export PKG_CONFIG_PATH=’/usr/local/lib/pkgconfig’ export LD_LIBRARY_PATH=’/usr/local/lib’:$LD_LIBRARY_PATH

这两行是centos上为node-canvas用的两个变量,看个人需要了。之前写在.bashrc里的,可是reboot之后chkconfig执行时,并没有export,所以我这里必须加。

其他的,shell熟悉的就不说了,就2个命令stop和start服务,用的forever实现。

然后在chkconfig --list察看本机的所有服务状态,如果有了tuer这个服务,检查5是否为on开启。 如果没有 chkconfig --add tuer 然后chkconfig --level 5 tuer on 。 不过如果写了shell里写了#345 99 01那一行,这里就不需要了。

reboot一下。开机直接访问服务,哦也,网站直接打开了~

然后说下定时重启和自动备份mongodb数据的实现。

看这个文件:https://github.com/xiaojue/tuer.me/blob/master/help.sh

这个就更简单了。cd到项目路径,然后mongodump打包备份数据库到backup,再tar一下,文件名为时间戳,打包之前删除其他tar备份文件。

最后再用之前的service tuer restart 实现重启服务。

最后在crontab -e 里增加定时执行。

  • */5 * * * /bin/sh /home/tuer2.0/help.sh

关于crontab的介绍google一下也非常多,间隔自己定吧。

如果还有精力折腾,使用monit监控下系统也是不错。。我还在研究中。。。

【最大的坑就是forever在rc.local里不可以执行】 【然后就是chkconfig的时候.bashrc,rc.local什么的都在它们后面执行】 【最后自己写的脚本,centos里得写额外注释实现系统的开机服务】

其他朋友有更好的办法。。有更好的快说。。

还有就是forever在bash里执行 ,执行的log路径不生效,还是得看root/.forever里的log文件啊。坑爹。。也许是我设置错了?有人弄成功。。。吗。

10 回复

如果放在crontab里面配置可以吗?

在crontabl配置即可

crontab是周期性被执行的指令 LZ的方法才是正解,注册成为一个service 在level 2345启动, 我受教了

受教啊,我也是用的forever启动.不过还没有加入到service里面

forever 是可以在rc.local里被执行的,我用的方法是写个sh,然后通过rc.local跑那sh:

usr/bin/at now +1 min < /home/photos/start_app.sh 用now+1,是因为这个App需要其他的一些services,如redis等,这是个赖人的方法,用一分钟代替更多的service check码,目前还没遇到问题。

用这个方法比较简单,用楼主的方法就比较全面。

Blockquote 最大的坑就是forever在rc.local里不可以执行】

你的办法也不错,受教了~

crontab 是周期性的,如果突然机器死了,再开机,到你的周期之间,服务会一直挂着~

所以开机启动很重要。。

用这方法试了下,不错,不过有两个建议:

  1. chkconfig:345 99 01
    99要低点,比如mysqld是64, 你的app如果需要mysqld先启动,99就会跑在mysqld前面,失败的机会大。

  2. 要是加个status就好, 通常都是: service myservice status

如果机器重启,然后来个: forever list 好像看不到东西 这样还可看到: ps -ef |grep node 不知是否只是我这样?

我这边是可以看到的。。root用户?

回到顶部