前阵子自己安装了WMware16、centos7,配置好jdk、mysql、nginx、redis并设置好开机自动启动后,打算将服务也做成自启动,因为之前做过本以为会很顺利,结果整了快两小时,觉得有必要记录下。
之前自己记录的博客:centos7开机运行java的sh脚本_centos7执行sh文件_lanren312的博客-CSDN博客
配置好后重启虚拟机发现运行java的脚本没运行成功,排查开始......
先上配置文件
1、有提示 : chmod +x /etc/rc.d/rc.local
执行后可以看到有了运行权限
再次重启虚拟机发现运行java的脚本没运行成功......
2、修改 /usr/lib/systemd/system/rc-local.service
rc-local 服务文件中没有 Install 字段的相关信息,如果不写系统就不认为它是一个 systemd 服务。
[Install]
WantedBy=multi-user.target
再次启动,然并卵......
3、启动rc-local服务,并加入开机启动
什么也不想说了......
4、仔细分析
回头看 cat /etc/rc.local 里面的文件,touch /var/lock/subsys/local,再去看这个文件是实时创建的,说明 /etc/rc.local 是开机启动了的,那就是自己的运行脚本有问题了,立马醒悟,去看了下服务的启动日志,提示 nohup: 无法运行命令"java": 没有那个文件或目录
nohup java -jar /data/xxxx/xxxx.jar >/data/xxxx/xxxx.log 2>&1 &
直接运行脚本时没有问题的,但是开机启动咋就不行了,无法识别java命令,那就填写全路径
[root@localhost /]# echo $JAVA_HOME
/data/lanren312/jdk1.8.0_191
nohup /data/lanren312/jdk1.8.0_191/bin/java -jar /data/xxxx/xxxx.jar >/data/xxxx/xxxx.log 2>&1 &
再次重启虚拟机,服务自启动了.....
5、疑惑
1、如果在 /etc/rc.local中配置jdk环境,运行脚本是否就不需要写全路径了,这个没有尝试,但感觉应该是可行的。
2、将服务启动脚本做成服务,有待尝试
vi /etc/systemd/system/lanren312.service
######## 写入内容
[Unit]
Description=lanren312-server
After=network.target
[Service]
Type=forking
ExecStart=/data/xxxx/start.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl start lanren312.service ## 启动lanren312服务
systemctl stop lanren312.service ## 停止lanren312服务
systemctl restart lanren312.service ## 重启lanren312服务
systemctl status lanren312.service ## 查看lanren312服务当前状态
systemctl enable lanren312.service ## 设置lanren312服务开机自启动
systemctl disable lanren312.service ## 停止lanren312服务开机自启动