Ubuntu18.04中自定义服务和开机启动

一,自定义程序start、stop、restart脚本

参考:https://www.cnblogs.com/jiangzuo/p/8000423.html这篇文档,或者其他软件的启动脚本

 

二,systemd脚本和设置服务和开机自启

参考:https://blog.csdn.net/u012313382/article/details/106711146/这篇文章

 

三,重要知识点

/lib/systemd/system(基本服务文件夹)或者在/usr/lib/systemd/system/
/etc/systemd/system(开机启动文件夹)或者在/usr/etc/systemd/system
如果使用了forking类型,那么建议同时设置 PIDFile= 选项
应该尽可能避免使用 simple 之外的类型(除非必须)
服务PID文件的路径(一般位于 /run/ 目录下)。 强烈建议在 Type=forking 的情况下明确设置此选项。

 

四,systemctl重要命令

list-units [PATTERN…]    列出 systemd 当前已加载到内存中的单元。 
start PATTERN    启动(activate)指定的已加载单元 (无法启动未加载的单元)。
stop PATTERN…    停止(deactivate) 指定的单元
reload PATTERN…    要求指定的单元重新加载它们的配置。
restart PATTERN…    重新启动(先停止再启动)指定的单元。 若指定的单元尚未启动,则启动它们。
status [PATTERN…|PID…]    如果指定了单元, 那么显示指定单元的运行时状态信息,以及这些单元最近的日志数据。如果指定了PID,那么显示指定PID所属单元的运行时状态信息,以及这些单元最近的日志数据。 
show [PATTERN…|JOB…]    以"属性=值"的格式显示指定单元或任务的所有属性。 

enable UNIT…, enable PATH…    启用指定的单元或单元实例(多数时候相当于将这些单元设为"开机时自动启动"或"插入某个硬件时自动启动")。 
disable UNIT…    停用指定的单元或单元实例(多数时候相当于撤销这些单元的"开机时自动启动"以及"插入某个硬件时自动启动")。
daemon-reload    重新加载 systemd 守护进程的配置。

 

五,systemd.service重要参数

[Unit]
Description=    有利于人类阅读的、对单元进行简单描述的字符串。
Documentation=    一组用空格分隔的文档URI列表, 这些文档是对此单元的详细说明。 
Requires=    设置此单元所必须依赖的其他单元。当启动此单元时,也必须启动这里列出的所有其他单元。 
Wants=    此选项是 Requires= 的弱化版。 当此单元被启动时, 所有这里列出的其他单元只是尽可能被启动。 但是,即使某些单元不存在或者未能启动成功, 也不会影响此单元的启动。 推荐使用此选项来设置单元之间的依赖关系。
BindsTo=    与 Requires= 类似,但是依赖性更强: 如果这里列出的任意一个单元停止运行或者崩溃,那么也会连带导致该单元自身被停止。
Before=, After=    强制指定单元之间的先后顺序,接受一个空格分隔的单元列表。 

[Service]
Type=    设置进程的启动类型。必须设为 simple, exec, forking, oneshot, dbus, notify, idle 之一
PIDFile=    该服务PID文件的路径(一般位于 /run/ 目录下)。 强烈建议在 Type=forking 的情况下明确设置此选项。 
ExecStart=    在启动该服务时需要执行的 命令行(命令+参数)。
ExecStartPre=, ExecStartPost=    设置在执行 ExecStart= 之前/后执行的命令行。 语法规则与 ExecStart= 完全相同。
ExecReload=    这是一个可选的指令, 用于设置当该服务 被要求重新载入配置时 所执行的命令行。 语法规则与 ExecStart= 完全相同。
ExecStop=    这是一个可选的指令, 用于设置当该服务被要求停止时所执行的命令行。 语法规则与 ExecStart= 完全相同。 
ExecStopPost=    这是一个可选的指令, 用于设置在该服务停止之后所执行的命令行。 语法规则与 ExecStart= 完全相同。 
RestartSec=    设置在重启服务(Restart=)前暂停多长时间。 默认值是100毫秒(100ms)。
Restart=    当服务进程 正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务。

Environment=    设置进程的环境变量, 接受一个空格分隔的 VAR=VALUE 列表。 
User=, Group=    设置进程在执行时使用的用户与组。 
DynamicUser=    设置是否动态分配用户。默认值为 "no" 。 

WorkingDirectory=    设置进程的工作目录。 
RootDirectory=    此选项仅可用于系统单元(不适用于用户单元)。 设置以 chroot(2) 方式执行进程时的根目录。

PrivateTmp=    设为 yes 表示在进程的文件系统名字空间中挂载私有的 /tmp 与 /var/tmp 目录, 也就是不与名字空间外的其他进程共享临时目录。 这样做会增加进程的临时文件安全性,但同时也让进程之间无法通过 /tmp 或 /var/tmp 目录进行通信。 同时,当服务停止之后,所有先前在临时目录中创建的文件都将被删除。

KillMode=    设置在单元停止时,杀死进程的方法。 取值范围如下: control-group, process, mixed, none
KillSignal=    设置 杀死进程的第一步 使用什么信号(见上文)。 默认值为 SIGTERM 信号。

[Install] 
WantedBy=, RequiredBy=    接受一个空格分隔的单元列表, 表示在使用 systemctl enable 启用此单元时, 将会在每个列表单元的 .wants/ 或 .requires/ 目录中创建一个指向该单元文件的软连接。 这相当于为每个列表中的单元文件添加了 Wants=此单元 或 Requires=此单元 选项。 这样当列表中的任意一个单元启动时,该单元都会被启动。

 

六,其他

systemctl status XXX.service
journalctl --unit=XXX.service
journalctl -xe

 

 参考:

https://blog.csdn.net/u012313382/article/details/106711146/

http://www.jinbuguo.com/systemd/systemctl.html#

http://www.jinbuguo.com/systemd/systemd.service.html

http://www.jinbuguo.com/systemd/systemd.unit.html#

http://www.jinbuguo.com/systemd/systemd.exec.html#

http://www.jinbuguo.com/systemd/systemd.resource-control.html#

http://www.jinbuguo.com/systemd/systemd.kill.html#

https://www.cnblogs.com/jiangzuo/p/8000423.html

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值