写在前面
今天写了一个java web程序,使用了mongodb,在腾讯云服务器上做测试。
腾讯云提供了控制台,在控制台的终端(网页)启动 mongodb 和 java 程序后,可以正常运行。
当关闭网页后, mongodb和 java web程序就一起退出了。
在网上查找了一些方案,均以失败告终。最后咨询了30岁就退休隐居十堰的大神后改用systemd ,问题成功解决。
失败的尝试记录如下:
1 nohup
2 /etc/rc.d/
3 /etc/init.d/
4 /etc/profile
systemd 的主要配置参考如下链接:
https://www.linuxidc.com/Linux/2016-04/129727.htm
这个文章的开头一句话让我如梦初醒(从Ubuntu 14.04升级到Ubuntu 15.04后,rc.local无效了,因为Ubuntu 15.04使用了systemd管理开机启动)
第一步 添加启动文件
在/lib/systemd/system/下添加启动文件
$ cd /lib/systemd/system/
$ sudo vim mymongodb.service
mymongodb.service内容为:
[Unit]
Description=mymongodb
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/mongod --dbpath /home/ubuntu/mongodata/data --logpath /home/ubuntu/mongodata/log/mongodb.log --logappend
[Install]
WantedBy=multi-user.target
ExecStart 里的内容替换成你要启动和程序或服务。
第二步 验证启动文件的编写是否正确
这时候可以这样测试这个文件的编写是否正确,
>sudo systemctl daemon-reload
>sudo systemctl mymongodb start
(可以 sudo systemctl start mymongodb.service 直接启动)
这两个命令后,可以直接查看你的服务是否正确运行了。比如我的是mongodb,我就可以用 mongo shell 查看一下是否可以连接上mongod。或是 ps -e | grep mongo 查看是否有进程号。
如果不行,可以用如下命令查看 systemctl 的日志:
>sudo journalctl -u mymongodb.service
日志里会有报错的信息。
这时候,我试了一下,重启系统,然后程序还是没有自动启动。
第三步 将启动文件软连接到/etc/systemd/system/multi-user.target.wants/
ln -s /lib/systemd/system/mymongodb.service /etc/systemd/system/multi-user.target.wants/mymongodb.service
执行了这条命令后,再重启系统,服务就开机自启动了。
遗留问题
我的 java web 程序依赖于 mongodb 的启动。我现在配置了两个 systemd服务,一个mongodb,一个javaweb。但是我是java web的启动文件里的 After 我不知道该如何编写,后续将做一些尝试。
参考连接
https://www.linuxidc.com/Linux/2016-04/129727.htm
https://pdf-lib.org/Home/Details/9426
https://blog.csdn.net/qq_25821067/article/details/79120222
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html