linux配置开机自启动

本文最后更新于 2025年4月17日 下午

rc.local配置自启动

打开 rc-local.service 脚本内容,内容如下

1
vim /lib/systemd/system/rc-local.service

alt text

一般正常的启动文件主要分成三部分

  • [Unit] 段: 启动顺序与依赖关系

  • [Service] 段: 启动行为,如何启动,启动类型

  • [Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动

可以看出,/etc/rc.local 的启动顺序是在网络后面,一般默认是没有 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段:

1
2
3
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

PS:添加了[Install]内容后,下面两行的WantedByAlias两个英文跟上面的都是绿色的,要是绿色才有用。

一般需要先修改rc-local.service的权限才可以进行编辑。我是直接root没有这个限制

系统中新建/etc/rc.local这个文件,默认是没有的

1
touch /etc/rc.local

rc.local加上权限

1
sudo chmod +x /etc/rc.local

做完这一步,还需要最后一步 前面我们说 systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接

1
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/

最后,打开rc.local,在第一行添加#!/bin/sh,最后一行添加exit 0。然后要执行的命令就写在中间。

如果在 /etc/rc.local 中添加的是 ./test.sh 这种脚本类型的,要在末尾加上&, 不然重启的时候会卡在启动界面进不去系统

将程序注册为服务并配置自启动

新建配置文件

1
vim /etc/systemd/system/myscript.service

键入以下配置

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
[Unit]
# 服务名称(建议用英文,不要包含特殊字符)
Description=myscript.service

# 确保网络就绪后启动(可添加其他依赖如 mysql.target)
After=network.target

[Service]
# 服务进程类型(simple/forking/oneshot等,simple为默认值)
Type=simple

# 启动脚本的绝对路径(必须可执行)
ExecStart=/path/to/your/script

# 工作目录(可选,影响相对路径解析)
WorkingDirectory=/path/to/working_dir

# 运行用户(建议避免使用root,改用专用用户)
User=root

# 重启策略:on-failure(非正常退出时重启)或always(任何退出都重启)
Restart=on-failure

# 重启前等待时间(避免频繁重启)
RestartSec=5

# 在指定时间窗口内限制重启次数(单位:秒)
StartLimitIntervalSec=300

# 最大重启次数,超过后永久停止
StartLimitBurst=10

[Install]
# 服务所属目标(multi-user.target为命令行模式)
WantedBy=multi-user.target

赋予权限

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

重新加载配置文件

1
sudo systemctl daemon-reload

配置开机自启动

1
sudo systemctl enable myscript.service

在/etc/init.d目录下添加自启动脚本

直接写一个sh脚本,丢到/etc/init.d目录下

添加软链接

1
sudo ln -s /etc/init.d/script /etc/rc2.d/S99script

/etc/rc.d/rc0.d/~/etc/rc.d/rc6.d/文件夹的含义不同,S开头代表是开启时处理的脚本,按照后面紧跟的数字进行按顺序启动,S99则是最后进行启动。

rc#.d的不同目录代表的运行级定义如下:

1
2
3
4
5
6
7
0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
2:多用户状态(没有NFS)
3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
4:系统未使用,保留
5:X11控制台,登陆后进入图形GUI模式
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

在这些目录之下,包含了许多对进程进行控制的脚本。这些脚本要么以 K## 开头,要么以 S## 开头:

1
2
3
K:kill,系统将终止对应的服务
S:start,系统将启动对应的服务
##:同一运行级别下脚本执行的顺序,数值小的先执行,数值大的后执行。很多时候这些执行顺序是很重要的,比如要启动Apache服务,就必须先配置网络接口。