systemctl自定义service
应用场景:开启自启动运行脚本/usr/local/manage.sh
一、服务介绍
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像须要开机不登陆就能执行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system文件夹下或/etc/systemd/system下面,每个服务以.service结尾,通常会分为3部分:[Unit]、[Service]和[Install]。
二、新建manage.service
[Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=aaa.service network.target remote-fs.target nss-lookup.target
Requires=aaa.service [Service] EnvironmentFile=-/run/test/manage.env Environment="TMPDIR=/var/tmp/" Type=forking PIDFile=/run/manage.pid ExecStartPre=/usr/bin/mkdir /usr/local/test --test=${TESTENV} ExecStart=/usr/local/manage.sh start ExecStartPost=/usr/bin/mkdir /usr/local/test2 ExecReload=/usr/local/manage.sh restart ExecStop=/usr/local/manage.sh stop PrivateTmp=true LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity TimeoutStartSec=5 MountFlags=slave RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
三、服务解说
[Unit]
Description : 服务的简单描述
Documentation : 服务文档
Before、After:定义启动顺序。Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx.service之后启动。
Requires:这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,这个单元也停止了。
Wants:推荐使用。这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,对本单元没有影响。
[Service]
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会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。
PIDFile:pid文件路径
ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。
ExecReload:指定单元停止时执行的命令或者脚本。
ExecStop:指定单元停止时执行的命令或者脚本。
PrivateTmp:True表示给服务分配独立的临时空间
Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。
EnvironmentFile:通过指定的文件加载环境变量。
Environment:直接指定环境变量
RestartSec:执行重启前暂停的秒数
TimeoutStartSec:设置该服务允许的最大启动时长。 如果守护进程未能在限定的时长内发出"启动完毕"的信号,那么该服务将被视为启动失败,并会被关闭。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。 设为 "infinity
" 则表示永不超时。 当 Type=oneshot
时, 默认值为 "infinity
" (永不超时), 否则默认值等于DefaultTimeoutStartSec=
的值
LimitNOFILE:打开文件描述符数量
LimitNPROC:用户的最大进程数量
LimitCORE:coredump文件的大小,infinity表示没有限制
[Install]
Alias:为单元提供一个空间分离的附加名字。
RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。
WantBy:单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。
Also:指出和单元一起安装或者被协助的单元。
DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例。