在服务器上安装的各种中间件,一般都需要配置成开机自启动。但是有些中间件的安装过程中并没有提供相关配置开机自启动的说明文档。本文总结一下Centos7通过systemctl enble配置服务自启动的方法。
一、Centos7通过systemctl enble配置服务自启动
在Centos7后,更推荐通过systemctl来控制服务。
Centos 系统服务脚本目录/usr/lib/systemd/ 有系统(system)和用户(user)之分,如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:/usr/lib/systemd/system/。反之,用户登录后才能运行的程序,存在用户(user)里,服务以.service结尾,即:/usr/lib/systemd/user/
服务的管理是通过 systemd,而 systemd 的配置文件大部分放置于 /usr/lib/systemd/目录内。但是 Red Hat 官方文件指出(详情请看:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/150.html), 该目录的文件主要是原本软件所提供的设置,建议不要修改!而要修改的位置应该放置于 /etc/systemd/system/目录内。
1.1 对于已安装的服务,直接设置开机自启动
1.查看服务状态:systemctl status 服务名
#示例
systemctl status zentao
systemctl status gitlab-runsvdir
如下图所示:
disabled:说明服务还没有开启开机自启动。
enabled:说明服务开启了开机自启动。
2.服务还没有开启开机自启动的,设置为开启开机自启动状态,执行命令:
systemctl enable 服务名
#示例
systemctl enable zentao
设置完成后,再查看状态:systemctl status zentao
服务状态说明:systemctl status 服务名称
loaded 系统服务已经初始化完成,加载过配置
active(running) 正有一个或多个程序正在系统中执行, vsftpd就是这种模式
atcive(exited) 僅執行一次就正常結束的服務, 目前並沒有任何程序在系統中執行
atcive(waiting) 正在執行當中,不過還再等待其他的事件才能继续处理
inactive 服务关闭
enbaled 服务开机启动
disabled 服务开机不自启
static 服务开机启动项不可被管理
failed 系统配置错误
1.2 对于未安装的服务,建立脚本设置开机自启动
以建立zentao服务开机自启动为例:
1.建立zentao服务文件:
#进入系统服务脚本目录
cd /usr/lib/systemd/system
# 建立服务文件
vim zentao.service
输入脚本内容:
[Unit]
Description=zentao
After=multi-user.target[Service]
Type=forking
ExecStart=/opt/zbox/zbox start
ExecReload=/opt/zbox/zbox restart
ExecStop=/opt/zbox/zbox stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
注意⚠️:
这里ExecStart、ExecReload、ExecStop的命令还是借助了上文在/etc/init.d目录下配置kibana脚本来实现。
参数说明:
[Unit]
(1) Description:描述服务
(2) After:描述服务类别
[Service]服务运行参数的设置 服务的启动、重启、停止命令全部要求使用绝对路径
(1)Type=forking是后台运行的形式
(2) User 服务启动用户
(3) Group 服务启动用户组
(4) ExecStart 为服务的具体运行命令
(5) ExecReload 为重启命令
(6) ExecStop 为停止命令
(7) PrivateTmp=True表示给服务分配独立的临时空间
[Install]服务安装的相关设置
(1)WantedBy=multi-user.target 设置为多用户
2.赋予执行权限,执行命令:chmod 754 zentao.service
权限组合就是对应权限值求和,如下:
7 = 4 + 2 + 1 读写运行权限
5 = 4 + 1 读和运行权限
4 = 4 只读权限.
这句命令的意思是将filename文件的读写运行权限赋予文件所有者,把读和运行的权限赋予群组用户,把读的权限赋予其他用户。
3.查看服务状态
(1)重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载,执行命令:systemctl daemon-reload
(2)查看服务状态,执行命令:systemctl status zentao.service
其中,disabled说明服务还没有开启开机自启动。
(3)开启服务开机启动,执行命令:systemctl enable zentao.service
1.3 常用服务文件
1.nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
2.mysql.service
[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
#ExecReload=/usr/local/mysql/support-files/mysql.server restart
#ExecStop=/usr/local/mysql/support-files/mysql.server stop
#PrivateTmp=true[Install]
WantedBy=multi-user.target
- redis.service
[Unit]
Description=Redis
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=kill -INT `cat /tmp/redis.pid`
User=www
Group=www[Install]
WantedBy=multi-user.target
- supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
SysVStartPriority=99[Install]
WantedBy=multi-user.target