目录

linux Ubuntu通过systemd 添加开机自动启动程序方法

机器

ubuntu 22

流程

建立Systemd 服务单元配置文件

建立一个新的Systemd 服务单元配置文件,储存于/etc/systemd/system/echo_server.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

[Unit] 

Description= Echo Server

[Service] 

 Type= simple

 ExecStart= /opt/echo_server.py

 Restart= always

[Install] 

WantedBy= multi-user.target

权限要设定为644

1
sudo chmod 644 /etc/systemd/system/echo_server.service

如果在开发过程中,有修改过Systemd 的服务单元配置文件,记得重新载入daemon 让新设置生效:

# 重新载入Systemd 配置文件

sudo systemctl daemon-reload

接着就可以使用 systemctl 命令启动自定义的echo 服务器:

# 启动自定义的echo 服务器

sudo systemctl start echo_server

查看echo 服务器的状态:

# 查看echo 服务器状态

systemctl status echo_server

常见systemctl的命令

允许开机自启:

1
systemctl enable scratch.service

其他命令

1
2
3
4
启动 sudo systemctl start scratch
重启 sudo systemctl restart scratch
停止 sudo systemctl stop scratch
日志 sudo systemctl status scratch

注意

要给足文件权限。

一个frp的demo

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Unit]
Description=frp service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple

#启动服务的命令(命令必须写绝对路径)
ExecStart=bash /home/m1ld/.test/frp_0.45.0_linux_amd64/run_frps.sh

# 停止服务后,执行的命令
ExecStop=ps -aux | grep frp | awk '{print $2}' | xargs kill -9

[Install]
WantedBy=multi-user.target

Systemd 服务单元配置文件说明:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[Unit] 
# 服务名称
Description= Your Server

# 服务相关文件
# Documentation=https://example.com 
# Documentation=man:<a class="wpal-linked-keyword" href="https://nginx.p2hp.com/" target="_blank">nginx</a>(8)

# 设定服务启动的先后相关姓,例如在网络启动之后:
# After=network.target

[Service] 
# 进程类型
Type= simple

# 启动服务命令
ExecStart=bash/sh /opt/your_command

# 服务进程PID(通常配合forking 的服务使用)
# PIDFile=/run/your_server.pid

# 启动服务前,执行的命令
# ExecStartPre=/opt/your_command

# 启动服务后,执行的命令
# ExecStartPost=/opt/your_command

# 停止服务命令
# ExecStop=/opt/your_command

# 停止服务后,执行的命令
# ExecStopPost=/opt/your_command

# 重新载入服务命令
# ExecReload=/opt/your_command

# 服务终止时自动重新启动
# Restart= always

# 重新启动时间格时间(预设为100ms)
# RestartSec=3s

# 启动服务超时秒数
# TimeoutStartSec=3s

# 停止服务超时秒数
# TimeoutStopSec=3s

# 执行时的工作目录
# WorkingDirectory=/opt/your_folder

# 执行服务的用户(名称或ID 皆可)
# User=myuser

# 执行服务的群组(名称或ID 皆可)
# User=mygroup

# 环境变数设置
# Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"

# 服务输出信息指向设定
# StandardOutput=syslog

# 服务错误信息息指向设定
# StandardError=syslog

# 设定服务在Syslog 中的名称
# SyslogIdentifier=your-server

[Install] 
WantedBy= multi-user.target

ref

https://blog.p2hp.com/archives/8690