关于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文件啊。坑爹。。也许是我设置错了?有人弄成功。。。吗。


12 回复

关于Node.js Web Server 如何设置开机启动、定时重启和自动备份数据

开机启动

为了确保Node.js应用能够在系统启动时自动运行,我们可以将其配置为系统服务。以下是一个简单的步骤指南:

  1. 创建一个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

  2. 启用并启动服务: 使用以下命令使服务在系统启动时自动启动,并立即启动服务。

    sudo systemctl enable myapp.service
    sudo systemctl start myapp.service
    

定时重启

可以使用cron任务来定期重启Node.js应用。假设我们希望每小时重启一次应用:

  1. 编辑Cron任务: 打开用户的cron表。

    crontab -e
    
  2. 添加定时重启任务: 添加如下行以每小时重启一次应用。

    0 * * * * systemctl restart myapp.service
    

自动备份数据

假设你的应用需要定期备份MongoDB数据库,可以编写一个Shell脚本来完成此任务。

  1. 创建备份脚本: 创建一个备份脚本,例如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/*
    
  2. 设置备份脚本的权限: 使脚本可执行。

    chmod +x /path/to/backup.sh
    
  3. 配置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 是周期性的,如果突然机器死了,再开机,到你的周期之间,服务会一直挂着~

所以开机启动很重要。。

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

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

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

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

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

要实现Node.js Web服务器的开机启动、定时重启和自动备份数据,可以采用以下步骤:

开机启动

你可以将你的Node.js应用封装成一个系统服务,这样它就能在系统启动时自动运行。以下是如何在Linux系统(以Ubuntu为例)上设置Node.js应用作为服务的方法:

  1. 创建服务文件:在 /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
  1. 启用并启动服务
    sudo systemctl enable myapp.service
    sudo systemctl start myapp.service
    

定时重启

可以使用 cron 来定期重启服务。首先编辑 crontab 文件:

sudo crontab -e

添加以下行以每5分钟重启一次服务:

*/5 * * * * systemctl restart myapp.service

自动备份数据

假设你要备份MongoDB数据库,可以编写一个Shell脚本来完成这项工作。以下是一个简单的例子:

  1. 创建备份脚本,例如 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
  1. 将该脚本添加到 crontab 中以每天凌晨3点执行:
0 3 * * * /path/to/backup.sh

以上步骤可以确保你的Node.js应用在系统启动时自动运行,定期重启,并且定期备份数据库。希望这些信息对你有所帮助!

回到顶部