通常我们使用 yum 安装某个服务的时候,安装完毕之后启动该服务可以直接使用 systemctl 这种方式启动,这是因为服务模块已经自动加入到了 systemd 中;而对于手动安装的服务,安装完毕后并没有将相关 service 加入到 systemd 里;
这里以 nginx 为例,将源码安装的 nginx 加入到 systemd 中,方便后续直接通过 systemctl 方式启动:
- 源码安装完 nginx 之后,启动 nginx 的方法如下:
[root@zabbix_server /root]# /usr/local/nginx/sbin/nginx -h
nginx version: nginx/1.22.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-e filename : set error log file (default: logs/error.log)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
## 如上,是通过 -s 参数指定具体的状态
## 启动:
/usr/local/nginx/sbin/nginx
## 暂停:
/usr/local/nginx/sbin/nginx -s top
## 退出:
/usr/local/nginx/sbin/nginx -s quit
## 重新加载:
/usr/local/nginx/sbin/nginx -s reload
- 如需通过 systemctl 方式启动,那么要手动创建 nginx.service 服务文件,并将其放入 /usr/lib/systemd/system 文件夹即可:
# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
PS: 注意上面的ExecStart/ExecReload/ExecStop 必须 以自己的为主
## 注释
[Unit]
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
- 写入之后重载一下 systemd
# systemctl daemon-reload
- 验证
[root@zabbix_server /root]# systemctl start nginx.service
[root@zabbix_server /root]# systemctl stop nginx.service
[root@zabbix_server /root]# systemctl restart nginx.service
[root@zabbix_server /root]# systemctl status nginx.service
● nginx.service - nginx
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2022-09-03 16:10:35 CST; 9s ago
Process: 18524 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 18525 (nginx)
Tasks: 2 (limit: 11218)
Memory: 2.0M
CGroup: /system.slice/nginx.service
├─18525 nginx: master process /usr/local/nginx/sbin/nginx
└─18526 nginx: worker process
Sep 03 16:10:35 zabbix_server systemd[1]: Starting nginx...
Sep 03 16:10:35 zabbix_server systemd[1]: Started nginx.
- 验证无误,顺便设置开机自启
[root@zabbix_server /root]# systemctl enable nginx.service
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
## 补充:
## 移除开机自启
[root@zabbix_server /root]# systemctl disable nginx.service
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.
## 查看所有已启动的服务
[root@zabbix_server /root]# systemctl list-units --type=service