# Linux 创建 systemd 服务

仅适用于支持 systemd 服务的发行版;例如 Ubuntu 16.04 或者 CentOS 7 以上系统


创建一个 .service 后缀的文件

vi /etc/systemd/system/test.service

填充以下内容,并根据实际情况更改;所有的路径均为绝对路径

[Unit]
Description=test
After=network.target
Wants=network.target

[Service]
User=root
Group=root
PIDFile=/run/test.pid
#Environment=""
#WorkingDirectory=/root/gopath/src/test
ExecStart=/root/gopath/src/test/test
#Restart=on-failure
#RestartSec=60s
#LimitCORE=infinity
#LimitNOFILE=100000
#LimitNPROC=100000

[Install]
WantedBy=multi-user.target

[Unit]

  • Description:备注,一般填写服务名称
  • After:指哪个服务启动之后才启动本服务;network.target 表示网卡服务
  • Wants:本服务启动之后还要启动什么服务,如果这 Wants 后面接的服务没有启动成功,其实不会影响本服务运行

[Service]

  • User:运行程序的用户
  • Group:用户的用户组
  • PIDFile:pid 文件位置
  • Environment:环境变量
  • WorkingDirectory:工作文件夹
  • ExecStart:启动的程序
  • Restart:定义了程序退出后,Systemd 的重启方式
    • no(默认值):退出后不会重启
    • on-success:只有正常退出时(退出状态码为0),才会重启
    • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
    • on-abnormal:只有被信号终止和超时,才会重启
    • on-abort:只有在收到没有捕捉到的信号终止时,才会重启
    • on-watchdog:超时退出,才会重启
    • always:不管是什么退出原因,总是重启
  • RestartSec:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待60秒

以下为系统文件句柄数量配置。对于需要大量写入文件的服务需要配置此项以免受系统限制

LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

[Install]

  • WantedBy:表示该服务所在的 Target

启用服务;启用后会开机自启

systemctl enable test

操作:启动、停止、重启

systemctl start|stop|restart test

禁用服务;禁用后开机不会再启动

systemctl disable test

文章部分内容参考链接: