赞
踩
开机启动最简单的方法是在/etc/rc.local
启动脚本中写入需要执行的命令。另一种方式是在/etc/init.d
中编写一个启动脚本。但是这两种方式都不是正规的启动模式。init.d是Linux最早的服务管理方案,命令service start xxx
就是去调用init.d中的启动脚本。之后init机制被systemd系统取代。linux的1号进程由init替换为systemd。systemd是system daemon的缩写,意思是系统的守护者。systemd提供了一组工具和机制来管理Linux的服务。例如systemctl与journalctl都是systemd命令。本文主要介绍如何使用systemd机制设置开机启动。systemd基础知识参考阮一峰的博客
首先需要在/lib/systemd/system/
中添加一个文件。本例中我们要为neo4j数据库配置开机自启动,添加文件neo4j.service
。写入
[Unit] Description=Neo4j Graph Database [Service] Type=forking User=root Group=root Restart=on-failure RestartSec=5s ExecStart=/usr/local/lib/neo4j-community-4.4.28/bin/neo4j start ExecReload=/usr/local/lib/neo4j-community-4.4.28/bin/neo4j restart ExecStop=/usr/local/lib/neo4j-community-4.4.28/bin/neo4j stop LimitNOFILE=1048576 [Install] WantedBy=multi-user.target
然后执行systemctl enable neo4j.service
。这个命令会创建一个软连接,将neo4j.service
链接到/etc/systemd/system/multi-user.target中,这样neo4j被设定为开机任务之一了。如果不重启也可以使用systemctl start neo4j.service
直接启动neo4j数据库。
一开始配置的时候,不能启动neo4j。使用journalctl -r -g neo4j
倒序观察与neo4j相关的系统日志。纵使发现启动命令Permission deny
。这个问题有两种可能的原因。有可能是启动用户配置错误,service下的User和group应当与与neo4j程序的owner一致,本例中都是root。
第二个原因是SELinux限制了权限。即使是root用户,如果selinux检查文件不安全也会禁止启动。可以将启动程序所在的文件夹标记为安全文件。使用命令restorecon -rv /usr/local/lib/neo4j-community-4.4.28
标记neo4j安装目录下的所有文件。
这个错误非常隐晦。采用systemctl status neo4j
查询neo4j状态,虽然显示succeed,但是状态时inactive,并且提示exit。无论restart,start都没有用。这个原因时Service的Type没有设置正确。simple其实是脚本启动,启动完成后脚本程序就结束了。一般服务是在脚本中使用nohup,或者在程序中创建了daemon进程。但是neo4j程序没有这样做。所以启动之后,systemd又停止了命令。对于这种情况,应该将type设定为forking。这种启动方式会fork一个进程执行启动命令,然后主进程推出,子进程作为daemon进程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。