CentOS6/7 配置守护进程( 二 )

1、[Unit]区块
[Unit]区块通常是配置文件的第一个区块,用来定义Unit的元数据,以及配置与其他Unit的关系 。
Description: 简短描述Documentation: 文档地址After:依赖,仅当依赖的服务启动之后再启动自定义的服务单元2、[Service]区块
[Service]区块用来Service的配置,只有service类型的unit才有本区块 。
Type: 定义启动时的进程行为 。它有以下几种值:
Type=simple:(默认值) systemd认为该服务将立即启动 。服务进程不会 fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是 socket 激活型 。Type=forking :systemd认为当该服务进程 fork,且父进程退出后服务启动成功 。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可 。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程 。Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务 。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态 。Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号 。这一通知的实现由 libsystemd-daemon.so 提供 。Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd 认为服务就绪 。Type=idle:systemd 会等待所有任务处理完成后,才开始执行 idle 类型的单元 。其他行为与 Type=simple 类似 。其他选项:
ExecStart:启动服务的命令ExecStartPre:启动服务之前执行的命令ExecStartPost: 启动服务之后执行的命令ExecReload:重启服务执行时的命令ExecStop:停止服务时执行的命令ExecStopPost:停止服务之后执行的命令RestartSec:自动重启服务间隔的秒数Restart:定义何种情况下会自动重启服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdogTimeoutSec:定义Systemd停止服务之前等待的秒数Environment:指定环境变量PIDFile:pid文件路径PrivateTmp:true表示给服务分配独立的临时空间User:执行命令的用户Group:执行命令的组3、[Install]区块
[Install]区块用来定义如何启动,以及是否开机启动 。
WantedBy:它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .wants后缀构成的子目录中RequiredBy: 它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .required后缀构成的子目录中Alias:当前Unit可用于启动的别名Also:当前Unit激活时(enable),会被同时激活的其他Unit五、Target的概念
Target就是一个Unit组,包含许多相关Unit 。启动某个Target的时候,Systemd就会启动里面所有的Unit 。
传统init启动模式里面,有RunLevel的概念,跟Target的作用很类似 。不同的是,RunLevel是互斥的,不可能多个RunLevel同时启动,但是多个Target可以同时启动 。
Target的常用命令:
查看所有target下的unitsystemctl list-unit-files --type=target查看默认target,即默认的运行级别 。对应于旧的`runlevel`命令systemctl get-default设置默认的targetsystemctl set-default multi-user.target查看target下的unitsystemctl list-dependencies multi-user.target切换target,不属于新target的unit都会被停止systemctl isolate multi-user.target六、自己配置一个
/lib/systemd/system/目录中定义一个自己的testserver.service文件
[Unit]Description=testserver[Service]# 应用程序所在的文件目录WorkingDirectory=/usr/local/src/testserver/ExecStart=/usr/local/src/testserver/testserverRestart=always# 如果服务崩溃,10秒后重新启动服务RestartSec=10KillSignal=SIGINTSyslogIdentifier=testserverUser=root# Production:生产环境 Development:开发环境# Environment=ASPNETCORE_ENVIRONMENT=Development[Install]WantedBy=multi-user.target# 由此target触发自启动

经验总结扩展阅读