关于Nodejs的web server如何设置开机启动,定时重启和自动备份数据。
关于Nodejs的web server如何设置开机启动,定时重启和自动备份数据。
今天弄了一下午的开机启动,终于弄好了,虽然不太完美。。但是解决思路给一下吧。
开始是在/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文件啊。坑爹。。也许是我设置错了?有人弄成功。。。吗。
关于Node.js Web Server 如何设置开机启动、定时重启和自动备份数据
开机启动
为了确保Node.js应用能够在系统启动时自动运行,我们可以将其配置为系统服务。以下是一个简单的步骤指南:
-
创建一个Systemd服务文件: 在Ubuntu 18.04及以上版本,推荐使用Systemd来管理服务。首先,在
/etc/systemd/system/
目录下创建一个新的服务文件,例如myapp.service
。[Unit] Description=My Node.js Application After=network.target [Service] ExecStart=/usr/bin/node /path/to/app.js Restart=always User=nodeuser Environment=NODE_ENV=production WorkingDirectory=/path/to/app [Install] WantedBy=multi-user.target
将上述内容保存到
/etc/systemd/system/myapp.service
。 -
启用并启动服务: 使用以下命令使服务在系统启动时自动启动,并立即启动服务。
sudo systemctl enable myapp.service sudo systemctl start myapp.service
定时重启
可以使用cron
任务来定期重启Node.js应用。假设我们希望每小时重启一次应用:
-
编辑Cron任务: 打开用户的cron表。
crontab -e
-
添加定时重启任务: 添加如下行以每小时重启一次应用。
0 * * * * systemctl restart myapp.service
自动备份数据
假设你的应用需要定期备份MongoDB数据库,可以编写一个Shell脚本来完成此任务。
-
创建备份脚本: 创建一个备份脚本,例如
backup.sh
。#!/bin/bash TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR="/var/backups/mongodb" BACKUP_FILE="$BACKUP_DIR/db_backup_$TIMESTAMP.tar.gz" # 删除旧备份 rm -f $BACKUP_DIR/*.tar.gz # 备份数据库 mongodump --out=$BACKUP_DIR tar -czvf $BACKUP_FILE $BACKUP_DIR/*
-
设置备份脚本的权限: 使脚本可执行。
chmod +x /path/to/backup.sh
-
配置Cron任务: 使用Cron任务定期运行备份脚本。
crontab -e
添加如下行以每天凌晨1点进行备份。
0 1 * * * /path/to/backup.sh
通过以上步骤,你可以确保Node.js应用在系统启动时自动启动,定期重启,并且数据库能够自动备份。
如果放在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用户?
要实现Node.js Web服务器的开机启动、定时重启和自动备份数据,可以采用以下步骤:
开机启动
你可以将你的Node.js应用封装成一个系统服务,这样它就能在系统启动时自动运行。以下是如何在Linux系统(以Ubuntu为例)上设置Node.js应用作为服务的方法:
- 创建服务文件:在
/etc/systemd/system/
目录下创建一个.service
文件,例如myapp.service
。
[Unit]
Description=My Node.js Application
After=network.target
[Service]
User=nodejsuser
ExecStart=/usr/bin/node /path/to/myapp.js
Restart=always
[Install]
WantedBy=multi-user.target
- 启用并启动服务:
sudo systemctl enable myapp.service sudo systemctl start myapp.service
定时重启
可以使用 cron
来定期重启服务。首先编辑 crontab
文件:
sudo crontab -e
添加以下行以每5分钟重启一次服务:
*/5 * * * * systemctl restart myapp.service
自动备份数据
假设你要备份MongoDB数据库,可以编写一个Shell脚本来完成这项工作。以下是一个简单的例子:
- 创建备份脚本,例如
backup.sh
:
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/path/to/backup"
DUMP_DIR="$BACKUP_DIR/dump_$TIMESTAMP"
mkdir -p $DUMP_DIR
mongodump --out=$DUMP_DIR
tar -czf $BACKUP_DIR/mongodb_backup_$TIMESTAMP.tar.gz -C $DUMP_DIR .
rm -rf $DUMP_DIR
- 将该脚本添加到
crontab
中以每天凌晨3点执行:
0 3 * * * /path/to/backup.sh
以上步骤可以确保你的Node.js应用在系统启动时自动运行,定期重启,并且定期备份数据库。希望这些信息对你有所帮助!