Bootstrap

如何编写systemd

仅以linux —— Centos为例,若其他系统,例如suse等参见官方文档

例:

[Unit]     

Description=test deamon   ##描述

After=rc-local.service     ##在after=的程序启动之后程序才会启动

[Service]

Type=simple

User=root

Group=root

WorkingDirectory=/home

ExecStart=/usr/bin/python test.py

Restart=always

[Install]

WantedBy=multi-user.target

Type= 参数说明

官方提供一下参数:

 simpleexecforkingoneshotdbusnotify or idle

Type=simple  说明:

  在有些情况下 systemctl start *** 这条命令即使执行成功,服务也没有运行,原因在于此条配置,simple为默认值(必须写,不写默认值为oneshot),在你指定ExecStart=所配置的进程视为主进程,因为服务管理器将在创建主服务进程之后和执行服务的二进制文件之前立即启动后续单元。请注意,这意味着即使无法成功调用服务的二进制文件(例如,因为选定的User=不存在,或者服务二进制文件丢失),简单服务的systemctl start命令行也将报告成功。

Type=exec   说明:

  exec类型类似于simple,但是服务管理器会考虑在主服务二进制文件执行后立即启动该单元。这意味着如果二进制文件丢失或者选定的User=不存在,systemctl start 将报错

Type=forking  说明:

  如果设置为forking,则会将execut=所配置的进程将调用fork()作为其启动的一部分,这意味着启动完成后父进程退出,子进程作为主服务进程运行,当父进程退出时,服务管理器默认该单元已经启动,通常搭配PIDFlie=选项,以便systemd能够可靠的识别服务的主要进程

Type=oneshot  说明

  如果没有指定Type=ExecStart=的话,Type=oneshot是默认的。请注意,如果使用此选项而没有RemainAfterExit=服务将永远不会进入活动单元状态,而是直接从激活转换到停用死亡,因为没有配置应连续运行的进程。

;