ubuntu自定义系统服务

寒江蓑笠翁大约 4 分钟Linuxlinuxservice

ubuntu自定义系统服务


在开发项目时,对于一些后台应用,可以自定义成linux的service,这样能够更加方便的管理。

首先在/etc/systemd/system下,创建一个xxx.service的文件,xxx是服务名。

service文件有特殊的配置格式,下面是一个简单的例子

[Unit]
Description=dstm daemon
# 依赖docker服务
Requires=docker.service
# 必须在docker服务成功启动后再启动
After=docker.service

[Service]
Type=forking
# 总是重启,开机自启
Restart=always

# 重启等待时间
RestartSec=2s
# 启动超时时间
TimeoutStartSec=10s
# 停止超时时间
TimeoutStopSec=10s
# 停止方式,仅杀死服务应用程序
KillMode=process

# 提示消息
ExecStartPre=/bin/echo "starting dstm daemon"
ExecStartPost=/bin/echo "dstm daemon started done"
ExecStopPost=/bin/echo "stop dstm daemon done"

# 服务启动命令,这里填写具体部署时应用执行文件的绝对路径
ExecStart=/root/hello
# 服务关闭命令
ExecStop=/bin/kill -SIGINT $MAINPID
# 服务重启命令
ExecReload=/bin/bash -c "/bin/kill -SIGINT $MAINPID && /root/hello"

[Install]
# 多用户情况下
WantedBy=multi-user.target
# 别名
Alias=hello.service

其中type有以下几种取值

  • Type=simple:默认值,执行ExecStart指定的命令,启动主进程

  • Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出

  • Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行

  • Type=dbus:当前服务通过D-Bus启动

  • Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行

  • Type=idle:若有其他任务执行完毕,当前服务才会运行,即后台运行

Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:

  • no(默认值):退出后不会重启;

  • on-success:当进程正常退出时(退出状态码为0),才会重启;

  • on-failure:当进程非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;

  • on-abnormal:当被信号终止和超时,才会重启;

  • on-abort:当收到没有捕捉到的信号终止时,才会重启;

  • on-watchdog:看门狗超时退出,才会重启;

  • always:总是重启。

KillMode:定义 Systemd 如何停止服务,可以设置的值如下:

  • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;

  • process:只杀主进程;

  • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;

  • none:没有进程会被杀掉。

创建完成后,执行命令重新加载服务文件

systemctl daemon-reload

随后使用service hello service 即可开启

上次编辑于:
贡献者: 246859