分享两个Linux下通用的服务单元模板
作为开发,在linux上部署很多时候会用到服务单元,这里介绍下个人使用的两个通用模板
会阻塞UI的应用启动
比如Nginx,如果我们使用这个命令启动Nginx,会发现当前命令被阻塞:/usr/bin/nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
对于这种会阻塞的启动,我们可以使用下面这个通用模板:
[Unit]
Description=Nginx
[Service]
Type=simple
WorkingDirectory=/root
User=root
ExecStart=/usr/bin/nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
ExecStop=/usr/bin/kill $MAINPID
KillMode=control-group
Restart=always
PrivateTmp=true
[Install]
WantedBy=multi-user.target
不会阻塞UI的应用启动
比如Nginx,如果我们使用这个命令启动Nginx,会发现执行完没有阻塞UI就结束了,进程将在后台运行:/usr/bin/nginx -c /etc/nginx/nginx.conf
这个时候我们可以使用下面的模板
[Unit]
Description=Nginx
[Service]
Type=forking
WorkingDirectory=/
PIDFile=/var/run/nginx.pid
User=root
ExecStart=/usr/bin/nginx -c /etc/nginx/nginx.conf
ExecStop=/usr/bin/kill $MAINPID
Restart=always
KillMode=control-group
StandardOutput=syslog
StandardError=syslog
PrivateTmp=true
[Install]
WantedBy=multi-user.target
说明:
Type:一个类型配置,simple表示ExecStar启动的进程是该服务的主进程,forking表示会fork使用ExecStar启动的进程(可以理解为创建一个后台进程)
WorkingDirectory:设置进程的工作目录
PIDFile:ExecStar启动的进程启动的pid文件的位置(forking模式下建议设置)
User:启用设置进程在执行时使用的用户(还可以使用Group参数设置组)
ExecStart:设置启动服务是要执行的命令(命令+参数)(建议采用绝对路径)
ExecStop:用于设置当该服务被要求停止时所执行的命令(有些应用会有启动命令,也会提供停止命令)
Restart:当服务退出时的重启操作,always表示无论正常还是异常退出都要重启
KillMode:Kill进程的模式:control-group表示kill所以cgroup内的进程(主进程和子进程),process表示仅kill主进程
StandardOutput:用于指定服务的标准输出日志的存储位置和方式,syslog输出发送到系统日志,null表示不输出,还有其他选择比如输出靠文件或者控制台
StandardError:用于指定服务的异常输出日志的存储位置和方式,syslog输出发送到系统日志,null表示不输出,还有其他选择比如输出靠文件或者控制台
PrivateTmp:用于指定服务是否使用私有的tmp目录(当存在子进程时此项很有用)
就简单介绍这么多吧,配置还有很多,这里只是一个简单的模板,两种方式是个人使用的,并非有强制,比如folking方式配置得当也可以运行会阻塞UI的应用启动的场景,simple方式配置得当也可以运行会阻塞UI的应用启动的场景,所以更多的配置网上有很多介绍,这里就不说了
一个专注于.NetCore的技术小白

浙公网安备 33010602011771号