用yum安装的软件(比如nginx)可以直接使用systemctl来管理 ,但是如果是源码安装的,无法使用systemctl来管理。
systemctl管理的原理:
1、我们在/usr/lib/systemcd/system下有各种.service文件
也就是说,要想被systemctl管理,就要在/usr/lib/systemd/system目录下,该软件就必须要在这个目录下创建这样一个.service文件。
2、我们以niginx为例,系统自带的nginx软件,在/usr/lib/systemd/system目录下有nginx.service文件
我们cat nginx.service看看里面的内容(cat sshd.service里面的内容,也大体一致):
[Unit]
Description= mynginx service(服务描述)
After=network-online.target(我这个服务在network-online启动之后启动) remote-fs.target nss-lookup.target(可加可不加)
Wants=network-online.target(可以不要)
[Service]
Type=forking(默认,用forking来启动我的进程)
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t(运行start命令)
ExecStart=/usr/sbin/nginx (运行start命令)
ExecReload=/usr/sbin/nginx -s reload (运行reload命令)
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target(在哪个运行级别)
3、我们以nginx为例,创建mynginx.service文件
cd /usr/lib/systemd/system
vim mynginx.service
[Unit]
Description= mynginx service(服务描述)
After=network-online.target(我这个服务在network-online启动之后启动)
[Service]
Type=forking(默认,用forking来启动我的进程)
ExecStart=/usr/local/nginx/sbin/nginx (运行start命令)
ExecStop=/usr/local/nginx/sbin/nginx -s stop (运行stop命令)
ExecRestart=/usr/local/nginx/sbin/nginx -s restart(运行restart命令)
ExecReload=/usr/local/nginx/sbin/nginx -s reload (运行reload命令)
[Install]
WantedBy=multi-user.target(在哪个运行级别)