今天弄了一下午的开机启动,终于弄好了,虽然不太完美。。但是解决思路给一下吧。
开始是在/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文件啊。坑爹。。也许是我设置错了?有人弄成功。。。吗。
如果放在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 是周期性的,如果突然机器死了,再开机,到你的周期之间,服务会一直挂着~
所以开机启动很重要。。
用这方法试了下,不错,不过有两个建议:
-
chkconfig:345 99 01
99要低点,比如mysqld是64, 你的app如果需要mysqld先启动,99就会跑在mysqld前面,失败的机会大。 -
要是加个status就好, 通常都是: service myservice status
如果机器重启,然后来个: forever list 好像看不到东西 这样还可看到: ps -ef |grep node 不知是否只是我这样?
我这边是可以看到的。。root用户?