您的位置:首页 > 运维架构 > Linux

centos7下设置成开机启动的java程序没有跑起来

2017-10-27 09:41 330 查看
centos下写了一个java程序,想设置成开机启动,然而设置成功之后,发现程序并没有跑起来。

使用了两种方法去设置开机启动,第一种是使用systemctl, 第二种就是直接修改rc.local文件,然后两种方法均是不行。 我的环境是centos7,第二种使用的方法是修改  /etc/rc.d/rc.local 文件,在最后一行加上 java -jar test.jar, 然后将rc.local加上执行权限 chmod +x rc.local

能够找到没有启动的原因是因为我使用supervisor在管理我的各种程序,java程序没有跑起来给了一个提示信息: can not find command "java"。 然后我手动敲命令或者使用supervisor启动都能成功。我就知道是环境变量的原因了。 

centos上安装java环境有几种方法,一种是使用yum命令安装,一种是直接解压jdk包到centos下面。 第一种不需要配置环境变量,第二种需要手动配置环境变量。 这个地方需要讲解一下环境变量是做什么用的, 为什么第一种方法不需要使用环境变量。  在linux下面运行程序下,需要给出程序的路径,比如说我们在a.out的目录下运行a.out 我们需要使用命令 ./a.out  而不能直接使用a.out。 如果直接使用a.out就需要将a.out拷贝到/bin 或者/sbin 目录下面。 这是因为linux在运行命令的时候如果没有找到程序就会去环境变量里边查找里边的目录,在linux里边环境变量是放在一个配置文件,配置文件想要起作用是需要使用source命令生效的。 

然后第二个就是涉及到linux的启动过程了。在linux启动过程中,可以看成有几个阶段,比较尴尬的是环境变量配置文件生效这个操作就有点晚。 而且在rc.local文件中有这么一段话: 

In contrast to previous due to parallel execution during boot this script will NOT be run after all other services. 

也就是centos7版本的时候,这个文件内的命令将会跟其他启动服务并行,不会在系统完成启动结束后再执行。这样就导致了环境变量生效在java运行之后。就出现了命令执行失败。

知道了原因去解决这个命令就比较简单了。 

第一个就是直接在命令中指定java工具的路径。  比如在我的电脑上,把命令改成 /usr/local/jdk1.8.0_144/bin/java -jar test.jar,

第二种方法就是在bin目录下创建java的软链接,也就是windows的快捷方式。这也是使用yum命令安装不需要配置环境变量的原因。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java centos 开机启动