前言:最近,有一个项目需要用到开机自动启动程序,所以就研究了一下,环境为redhat8,程序是node,使用forever来进行node程序的持久化,程序使用的是443端口,开启的是https
1.把node和forever的快捷方式放在放在/usr/bin/(环境变量)下面,所有的命令默认是从这里面进行调用的
查询下node的地址在哪里
ln -s /home/tool/node/node-v8.11.3-linux-x64/bin/node /usr/bin/node //这里的路径就是安装node的路径
ln -s /home/tool/node/node-v8.11.3-linux-x64/bin/node /usr/bin/node
2.添加开机自启动
vi /etc/rc.d/rc.local
添加一下代码
forever start -s /home/demo/app.js //这里的程序所在的路径
3.设置一下权限即可
chmod +x /etc/rc.d/rc.local
4.重启查看forever list看程序有没运行
我们可以看到已经启动了程序,我们访问下程序
我们发现程序并不能访问
网站报错内容为:
此网站无法提供安全连接
协议不受支持
客户单端和服务器不支持一般SSL协议版本或加密套件
5.排查过程:
1.防火墙
1首先关闭防火墙进行排查是否是原因所在,结果发现并不是原因:
2.更换端口:
我们把程序的启动端口修改了,改为了8081然后重启服务器进行测试,结果发现重启服务器可以重新启动
3.ssl证书问题
在网上找了一圈就没有相关的解决方案,基本都是ssl证书的问题,我之前也觉得也是ssl证书过期的问题,但是如果是ssl证书过期我用上面的http也可以实现访问,所以问题不是出在了这里,随后我又找了开机启动程序相关的问题,结果发现都不是问题所在,问题就此耽搁住了
4.使用443端口,用命令启动程序
我们可以看到,点击下面的地址是可以直接进入程序的,这一点我已经验证过了
5.转机
突然,我想到既然用命令行的方式可以启动程序,那我直接把命令行的过程复现一下不就可以了吗,首先,我复现下用命令行启动的过程
1.cd /程序的目录
2.启动程序
我们再来看看开机启动程序的脚本
forever start -s /home/demo/app.js //这里的程序所在的路径
两者对比,我们发现,命令行启动是cd到具体的目录下然后在执行启动命令,而开机脚本写的是后面带上程序的绝对路径,我想应该就是这个绝对路径的区别,然后我修改了开机脚本,具体如下:
我们重启服务器
我们可以看到已经顺利进来了,就此问题解决
尾巴:虽然这个问题解决起来非常简单,但是排查问题的过程确实非常漫长而且头疼,找打不到相关对应的资料,只能自己摸索尝试
标签:node,bin,forever,启动,443,无法访问,程序,linux,开机 From: https://www.cnblogs.com/sk777/p/16821235.html