Linux系统部署项目并设置开机自启

前边有几篇博客记录了redhat中系统的部署和nginx的部署使用,接下来记录一下设置开机自启的步骤。

mysql的开机自启

将服务文件拷贝到init.d下,并重命名为mysqld,注意处理以下命令的空格

cp /opt/install/mysql-5.7.33/support-files/mysql.server /etc/init.d/mysqld

赋予可执行权限

chmod +x /etc/init.d/mysqld

添加服务

chkconfig --add mysqld

可以通过查看服务命令列表确认

chkconfig --list

列表中如果mysql的345没有开启,则进行开启

chkconfig --level 345 mysqld on

以上步骤就完成了mysql的开机自启

 

Nginx开机自启

设置nginx开机启动,只需在rc.local增加启动代码即可。

敲黑板了!!!前提/etc/rc.d/rc.local是可执行文件,进行检查,如果不是可执行文件,修改为可执行文件,如果不是可执行文件,会无法自启。

chmod +x /etc/rc.d/rc.local

修改为可执行文件后,进行编辑,编辑时一定要注意,只要有一个命令错误,就会导致文件里所有的开机自启都不生效,所以一定要仔细检查命令。我在这个地方掉进坑里了,爬了很久的!!!!

vim /etc/rc.d/rc.local

在底部增加一行代码

/usr/local/nginx/sbin/nginx

看这张图,应该能够看到,不止开机自启了nginx,还自启了monitor.sh也就是更新系统时的监听脚本,以及tomcat启动脚本

 

tomcat开机自启

同样,跟nginx一样,设置tomcat开机启动,只需在rc.local增加启动代码即可。

vim /etc/rc.d/rc.local

不同的是,在底部增加以下三行代码,因为tomcat的启动需要依赖jdk,所以在这里单独引入,不然会导致所有自启都不生效。掉进的坑就是这里!!!查了很久很久!!!

export JAVA_HOME=/opt/install/java/jdk1.8.0_271
export JAVA_JRE=/opt/install/java/jdk1.8.0_271/jre /opt/firewall/fwm/bin/script/start.sh

 

总结:如果设置完成后开机无法自启,那么进行检查

1、/etc/rc.d/rc.local 这个文件是不是可执行文件,不是的话请设置为可执行文件,命令上边有,不再追叙

2、检查所有的命令是否能够正常执行,一定要确保添加的所有命令能否正确执行,只要有一个无法执行,就会导致所有的设置都不生效

3、检查所有的命令都能够正常执行,还是不行,那么就需要检查一下日志了,执行以下命令    

systemctl status rc-local.service -l

说一下我遇到的一个奇葩神坑,在开机之后执行启动tomcat的命令也就是/opt/firewall/fwm/bin/script/start.sh这个命令时,没有问题,能够正常启动,但是写进自启动里面怎么都启动不成功,导致其他设置也都不生效,于是各种百度,以下几个步骤时最靠谱的

判断启动级别,命令为 runlevel ,是否为3或5。可以使用命令“init 3”修改启动级别为3.
运行命令ls /etc/rc.d/rc3.d -l 判断,是否有S99local -> /etc/rc.d/rc.local 的软链接,文件名可能不一样,但要有 /etc/rc.d/rc.local的软链接,有的是 /etc/rc.local,反正就是你要运行的rc.local的文件。  
如果没有则建立软链接,ln -s /etc/rc.d/rc.local /etc/rc.d/rc3.d/S99local
如果有 /etc/rc.d/rc.local链接,则判断权限是否为可执行,如果不是,可添加权限chmod +x  /etc/rc.d/rc.local。
如果还没有执行,可能是你的rc.local代码本身就有问题。

于是,检查了启动等级,确实是3,查看确实没有软连接,于是设置软连接,开始已经设置为可执行权限,那么就剩下最后一个问题了,rc.local代码本身有问题,可是所有命令一个个都测试了,没有问题啊,真人让头大!!!!

那么就检查日志吧,输入上边提到的查看日志命令。

复制代码
[root@localhost ~]# systemctl status rc-local.service -l
● rc-local.service - /etc/rc.d/rc.local Compatibility
   Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2021-03-21 18:44:44 CST; 1min 13s ago
  Process: 1049 ExecStart=/etc/rc.d/rc.local start (code=exited, status=1/FAILURE)

3月 21 18:44:44 localhost.localdomain rc.local[1049]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
3月 21 18:44:44 localhost.localdomain rc.local[1049]: At least one of these environment variable is needed to run this program
3月 21 18:44:44 localhost.localdomain rc.local[1049]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
3月 21 18:44:44 localhost.localdomain rc.local[1049]: At least one of these environment variable is needed to run this program
3月 21 18:44:44 localhost.localdomain rc.local[1049]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
3月 21 18:44:44 localhost.localdomain rc.local[1049]: At least one of these environment variable is needed to run this program
3月 21 18:44:44 localhost.localdomain systemd[1]: rc-local.service: control process exited, code=exited status=1
3月 21 18:44:44 localhost.localdomain systemd[1]: Failed to start /etc/rc.d/rc.local Compatibility.
3月 21 18:44:44 localhost.localdomain systemd[1]: Unit rc-local.service entered failed state.
3月 21 18:44:44 localhost.localdomain systemd[1]: rc-local.service failed.
复制代码

看到标红的没,失败了,失败原因Neither the JAVA_HOME nor the JRE_HOME environment variable is defined,翻译过来就是 JAVA_HOME和JRE_HOME环境变量均未定义,

原来缺少依赖的环境变量,那么这不就好办了吗,嘴角微微上扬了,添加上去不就行了,引入所依赖的环境变量。

export JAVA_HOME=/opt/install/java/jdk1.8.0_271
export JAVA_JRE=/opt/install/java/jdk1.8.0_271/jre
/opt/firewall/fwm/bin/script/start.sh

这是正常启动之后的日志结果

复制代码
[root@localhost ~]# systemctl status rc-local.service -l
● rc-local.service - /etc/rc.d/rc.local Compatibility
   Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
   Active: active (running) since 日 2021-03-21 18:10:39 CST; 7min ago
  Process: 1062 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/rc-local.service
           ├─1074 nginx: master process /usr/local/nginx/sbin/ngin
           ├─1079 nginx: worker process
           ├─1126 sh /opt/firewall/fwm/bin/script/monitor.sh fmsDaemon
           ├─1724 /opt/install/java/jdk1.8.0_271/jre/bin/java -Djava.util.logging.config.file=/opt/firewall/apache-tomcat-8.5.61/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/firewall/apache-tomcat-8.5.61/bin/bootstrap.jar:/opt/firewall/apache-tomcat-8.5.61/bin/tomcat-juli.jar -Dcatalina.base=/opt/firewall/apache-tomcat-8.5.61 -Dcatalina.home=/opt/firewall/apache-tomcat-8.5.61 -Djava.io.tmpdir=/opt/firewall/apache-tomcat-8.5.61/temp org.apache.catalina.startup.Bootstrap start
           └─2409 sleep 1

3月 21 18:10:39 localhost.localdomain rc.local[1062]: at java.net.Socket.<init>(Socket.java:228)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:504)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at java.lang.reflect.Method.invoke(Method.java:498)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:388)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
3月 21 18:10:39 localhost.localdomain rc.local[1062]: Tomcat started.
3月 21 18:10:39 localhost.localdomain systemd[1]: Started /etc/rc.d/rc.local Compatibility.
复制代码

于是大功告成。自启设置结束,nginx还有tomcat以及监听自动更新的脚本都能够成功自启了。

还有其他方式,不过还没有尝试,等我尝试了再进行记录。先保留一下参考链接:

https://blog.csdn.net/pro_fan/article/details/102844734      解决Neither the JAVA_HOME nor the JRE_HOME environment variable is defined问题

https://blog.csdn.net/q979392157/article/details/81353975     Linux环境下配置tomcat开机自动启动的两种方法

https://blog.csdn.net/kexuanxiu1163/article/details/107437981    Linux系统如何设置开机自动运行脚本?

http://blog.itpub.net/26736162/viewspace-2700906/          /etc/rc.d/rc.local不执行的解决办法  

 

记在最后,其实这次走完全过程后,获取到最大的帮助下,是如何根据日志查找问题,而不是一上来就无头苍蝇一样,各种百度,如果我一开始就查看开机自启日志,看到报错,就不可能花费了一下午的时间,去研究这个事情,仅作记录,以作警示。希望等给看到这篇博客的人一点帮助。

加油吧,菜鸟!!!

现在记录一下第二个开机自启的步骤

切换到安装了tomcat/bin的目录下 
必须使用root权限。 
用vi startup.sh 编辑文件 

vi /opt/firewall/apache-tomcat-8.5.61/bin/start.sh

然后在startup.sh的文件开头的地方添加如下内容,不要因为是注释的代码就不加了,还是需要加的!!!

#chkconfig:2345 80 90
#description:tomcat auto start
#processname:tomcat

如下图片

 

 

 再修改catalina.sh文件

vi /opt/firewall/apache-tomcat-8.5.61/bin/catalina.sh

在命令模式下,搜索/export,添加几个变量,地址改成自己的

 export CATALINA_BASE=/opt/firewall/apache-tomcat-8.5.61/bin/
 export CATALINA_HOME=/opt/firewall/apache-tomcat-8.5.61/bin/
 export CATALINA_TEMDIR=/opt/firewall/apache-tomcat-8.5.61/bin/

如下图片

 

 

 再次设置setclasspath.sh,

vi /opt/firewall/apache-tomcat-8.5.61/bin/setclasspath.sh

添加内容,配置环境变量,敲黑板了!!!这是重点啊,要是这里不设置,自启启动不了的,还是需要依赖环境变量的,这也是一个大坑,掉进去我也爬了很久才出来的,参考链接并没有这一步,结果一直无法启动。可能是我之前的环境变量有问题吧,反正现在自启都需要手动配置一下

JAVA_HOME=/opt/install/java/jdk1.8.0_271
JRE_HOME=/opt/install/java/jdk1.8.0_271/jre

如下图片:

 

 

 这三个文件修改完,直接在bin目录下启动试一下,如果出错赶紧改。

添加软连接

ln -s /opt/firewall/apache-tomcat-8.5.61/bin/startup.sh /etc/rc.d/init.d/tomcat7

然后cd 到/etc/rc.d/init.d/目录 

cd /etc/rc.d/init.d/

用ll查看一下tomcat是否有可执行权限? 

如果没有的话使用chmod +x tomcat7添加执行权限 
然后用chkconfig –add tomcat7 添加开机启动服务 
最后使用chkconfig –list确认一下是否添加成功 

复制代码
[root@localhost init.d]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysqld          0:关    1:关    2:开    3:开    4:开    5:开    6:关
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
rhnsd           0:关    1:关    2:开    3:开    4:开    5:开    6:关
tomcat7         0:关    1:关    2:开    3:开    4:开    5:开    6:关
[root@localhost init.d]#
复制代码

然后就可以重启linux系统了

reboot
posted @ 2021-03-27 15:00  背着泰山找黄河  阅读(676)  评论(0编辑  收藏  举报