systemd 是一个 Linux 系统上用来启动守护进程的系统和服务管理器,它已经成为大多数 Linux 发行版的标准。
在CentOS7中,systemd 替代了之前的 init 系统。
一个 systemd 服务文件通常放置在 /etc/systemd/system/目录下,并且拥有.service后缀。
服务文件用于描述如何启动服务、服务的依赖关系、如何停止服务以及何时启动服务等。
学习技巧,直接用yum ,apt,dnf等包管理器,下载各类服务,自带的service文件
学习正确的写法,改造即可
# Nginx.service案例
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target ns-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
解释:
[Unit] 部分:
Description: 服务的描述。
After: 指定了服务启动的顺序,确保网络等其他服务在 Nginx 启动前已经启动。
[Service] 部分:
Type=forking: 表示服务将会 fork 一个子进程。
PIDFile: Nginx 主进程的 PID 文件位置。
ExecStartPre: 在主 ExecStart 命令之前执行的命令,通常用于配置测试。
ExecStart: 启动服务的命令。
ExecReload: 重新加载配置的命令。
ExecStop: 停止服务的命令。
PrivateTmp: 设置为 true,表示给服务分配独立的临时文件空间。
[Install] 部分:
WantedBy: 指定了启用服务时应该被哪个目标所引用。
# mysql.service案例
[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
ExecStart=/usr/bin/mysqld_safe
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# redis.service案例
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
User=redis
Group=redis
Type=forking
PIDFile=/var/run/redis/redis.pid
ExecStart=/usr/bin/redis-server /etc/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
# 总结
1. 定义 [unit] 这个脚本的作用,这个服务要依赖于,等待那些程序启动后,再加载
2. 这个service的运行用户,进程模式,pid文件,启动二进制,关闭二进制命令是什么
3. Install部分,可以固定理解是,系统是多用户运行级别加载的,系统启动后,该程序也运行,需要设置 systemctl enable