记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

在Linux系统中将自己部署的服务注册为系统服务

在Linux系统中将自己部署的服务注册为系统服务
一、概述
systemctl是一个系统软件服务的管理工具,可以用于启动、停止、重启和重新加载服务,查看服务状态以及设置默认启动级别等。它还可以管理服务之间的依赖关系,定制服务配置,并对服务的日志进行管理,在Linux中,定义软件服务的文件通常是systemd服务单元文件,具有.service后缀,这些文件通常位于以下目录:
XML/HTML代码
  1. /etc/systemd/system/
  2. /usr/lib/systemd/system
  3. /lib/systemd/system
二、service文件
1、格式说明
service文件通常由三部分组成:
XML/HTML代码
  1. [Unit]:定义与Unit类型无关的通用选项,用于提供unit的描述信息、unit行为及依赖关系等
  2. [Service]:与特定类型相关的专用选项,此处为Service类型
  3. [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
注:以#开头的行后面的内容会被认为是注释
1、yes、on、true代表开启,0、no、off、false代表关闭
时间单位默认是秒,可以用毫秒(ms)分钟(m)等须显式说明
2、可选项说明
Unit部分
XML/HTML代码
  1. Description:    对当前服务的简单描述
  2. After:    可以指定在哪些服务之后进行启动
  3. Before:    可以指定在哪些服务之前进行启动
  4. Requires:    可以指定服务依赖于哪些服务(这种依赖是"强依赖",一旦所依赖的服务异常,当前的服务也随之停止)
  5. Wants:    可以指定服务依赖于哪些服务(这种依赖是"弱依赖",即使所依赖的服务的启动情况不影响当前的服务是否启动)
  6. Conflicts:    定义units间的冲突关系
Service部分
XML/HTML代码
  1. EnvironmentFile: 环境配置文件,用来指定当前服务启动的环境变量
  2. ExecStart: 指定服务启动时执行的命令或脚本
  3. ExecStartPre: 指定服务启动前执行的命令或脚本
  4. ExecStartPost:    指定服务启动后执行的命令或脚本
  5. ExecStop:    指明停止服务要运行的命令或脚本
  6. ExecStopPost:    指定服务停止之后执行的命令或脚本
  7. RestartSec:    指定服务在重启时等待的时间,单位为秒
  8. ExecReload:    指明重启服务要运行的命令或脚本
  9. Restart:    当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务,具体看下列类型
  10. PrivateTmp:    设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
  11. KillMode:    指定停止的方式,具体见下面
  12. Restart:    指定重启时的类型,具体见下面
  13. Type:    指定启动类型,具体见下面
type的可选值
XML/HTML代码
  1. simple  指定ExecStart字段的进程为主进程
  2. forking  指定以fork() 子进程执行ExecStart字段的进程
  3. oneshot  执行一次
  4. notify  启动后发送会发送通知信号通知systemd
  5. idle  等其他任务结束后才运行
Restart的可选值
XML/HTML代码
  1. no:    退出后不会重启
  2. on-success:    当进程正常退出时(退出码为0) 执行重启
  3. on-failure:    当进程不正常退出时(退出码不为0) 执行重启
  4. on-abnormal:   当被信号终止和超时执行重启
  5. on-abort:      当收到没有捕捉到的信号终止时执行重启
  6. on-watchdog:   当看门狗超时时执行重启
  7. always:        一直重启
KillMode可选值
XML/HTML代码
  1. control-group:   杀掉当前进程中所有的进程
  2. process:      杀掉当前进程的主进程
  3. mixed:    主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  4. none:    不杀掉任何进程
Install部分
XML/HTML代码
  1. Alias:    别名,可使用systemctl command Alias.service
  2. RequiredBy:   被哪些units所依赖,强依赖
  3. WantedBy:   被哪些units所依赖,弱依赖
  4. Also:   安装本服务的时候还要安装别的相关服务
  5. Install:  一般填为WantedBy=multi-user.target
三、service文件样例
将自己部署的nginx注册为系统服务
XML/HTML代码
  1. [Unit]  
  2. Description=The nginx web and reverse proxy server
  3. Documentation=https://nginx.org/en/docs/
  4. After=network-online.target remote-fs.target nss-lookup.target
  5. Wants=network-online.target
  6.  
  7. [Service]
  8. Type=forking
  9. #启动检测命令
  10. ExecStartPre=/usr/local/nginx/sbin/nginx -t
  11. #启动命令
  12. ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  13. #重载配置文件命令
  14. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  15. #停止命令
  16. ExecStop=/usr/local/nginx/sbin/nginx -s quit
  17.  
  18. [Install]
  19. WantedBy=multi-user.target
将自己部署的mysql注册为系统服务
XML/HTML代码
  1. [Unit]  
  2. Description=Mysql
  3. After=syslog.target network.target remote-fs.target nss-lookup.target
  4.  
  5. [Service]
  6. Type=forking
  7. #指定PID文件
  8. PIDFile=/usr/local/mysql/data/centos-linux.shared.pid
  9. #启动MySQL
  10. ExecStart=/usr/local/mysql/support-files/mysql.server start
  11. #重载
  12. ExecReload=/bin/kill -s HUP $MAINPID
  13. #停止服务
  14. ExecStop=/usr/local/mysql/support-files/mysql.server stop
  15. PrivateTmp=false
  16.  
  17. [Install]
  18. WantedBy=multi-user.target
四、systemctl命令合集
XML/HTML代码
  1. #语法
  2. systemctl COMMAND name.service
  3. #启动
  4. systemctl start name.service
  5. #停止
  6. systemctl stop name.service
  7. #重启
  8. systemctl restart name.service
  9. #查看状态
  10. systemctl status name.service
  11. #禁止自动和手动启动
  12. systemctl mask name.service
  13. #取消禁止
  14. systemctl unmask name.service
  15. #查看某服务当前激活与否的状态
  16. systemctl is-active name.service
  17. #查看所有已经激活的服务
  18. systemctl list-units --type|-t service
  19. #查看所有服务
  20. systemctl list-units --type service --all
  21. #设定某服务开机自启,相当于chkconfig name on
  22. systemctl enable name.service
  23. #设定某服务开机禁止启动:相当于chkconfig name off
  24. systemctl disable name.service
  25. #查看所有服务的开机自启状态,相当于chkconfig --list
  26. systemctl list-unit-files --type service
  27. #用来列出该服务在哪些运行级别下启用和禁用:chkconfig –list name
  28. ls /etc/systemd/system/*.wants/name.service
  29. #查看服务是否开机自启
  30. systemctl is-enabled name.service
  31. #列出失败的服务
  32. systemctl --failed --type=service
  33. #开机并立即启动或停止
  34. systemctl enable --now postfix
  35. systemctl disable  --now postfix
  36. #查看服务的依赖关系
  37. systemctl list-dependencies name.service
  38. #杀掉进程
  39. systemctl kill unitname
  40. #重新加载配置文件
  41. systemctl daemon-reload
  42. #关机
  43. systemctl halt、systemctl poweroff
  44. #重启
  45. systemctl reboot
  46. #挂起
  47. systemctl suspend
  48. #休眠
  49. systemctl hibernate
  50. #休眠并挂起
  51. systemctl hybrid-sleep
参考

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):