分享两个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的应用启动的场景,所以更多的配置网上有很多介绍,这里就不说了

 

posted @ 2025-05-26 09:34  没有星星的夏季  阅读(19)  评论(0)    收藏  举报