Linux 系统服务开机自启动指导手册

一、引言

在 Linux 系统中,设置服务开机自启动是常见的系统配置任务。本文档详细介绍了多种实现服务开机自启动的方法,包括 systemctl 方式、通用脚本方式、crontab 方案等,并提供了生产环境下的方案建议和开机启动脚本示例。

二、systemctl 方式

2.1 适用范围

适用于已安装为系统服务且服务文件(.service)存储在/usr/lib/systemd/system的组件。

2.2 设置开机启动

使用systemctl enable xxx指令设置开机启动,其中xxx为服务名。例如,设置mysqld服务开机启动:

bash 复制代码
systemctl enable mysqld

会在/etc/systemd/system/xxx/(系统服务)或/etc/systemd/user/(用户服务)下创建.service 文件的软连接。如mysqld服务,会创建从/etc/systemd/system/multi - user.target.wants/mysqld.service到/usr/lib/systemd/system/mysqld.service的软连接。

2.3 取消开机启动

执行systemctl disable xxx,或者手动移除/etc/systemd/system/xxx/或/etc/systemd/user/下相应软连接或服务文件。

2.4 查看开机启动状态

使用systemctl status xxx查看服务当前状态及是否开机启动。例如,查看mysql服务:

bash 复制代码
systemctl status mysqld

2.5 分类查看服务

查看系统中已经enable的服务:

bash 复制代码
systemctl list-unit-files --state=enabled
systemctl list-enabled

查看系统中已经disable的服务:

bash 复制代码
systemctl list-unit-files --state=disabled
systemctl list-enabled

三、chkconfig 方式

3.1 适用条件

服务脚本文件必须在/etc/init.d/目录下,且结合/etc/rc.d/rc0.d~rc6.d目录实现,同时服务脚本文件必须包含必要的头部脚本代码。

3.2 设置开机启动

使用

bash 复制代码
chkconfig --add mysql
chkconfig --level 3 mysql on/off

其中mysqld为服务名,--level 3表示在运行级别 3 下设置开机启动或关闭。

3.3 查看开机启动状态

使用

bash 复制代码
chkconfig --list mysql

四、通用脚本方式

4.1 适用范围

不管组件是否已安装为系统服务均适用。

4.2 方法一:追加启动命令到默认启动脚本

将启动命令追加到/etc/rc.local(或/etc/rc.d/rc.local,前者是后者的软连接)。需要先赋予/etc/rc.d/rc.local可执行权限。

bash 复制代码
chmod +x /etc/rc.d/rc.local
echo "/usr/local/your_service_start_command" >> /etc/rc.d/rc.local

4.3 方法二:编写启动脚本并放置在特定目录

编写启动脚本.sh,放置到/etc/profile.d目录下。脚本需设置可执行权限,如:

bash 复制代码
chmod +x /etc/profile.d/your_service_start.sh

4.4 方法三:编写启动脚本并追加执行指令到默认启动脚本

编写启动脚本.sh,设置可执行权限后,将脚本的执行指令追加到/etc/rc.local或/etc/rc.d/rc.local。例如:

bash 复制代码
chmod +x /usr/local/your_service_start.sh
echo "/usr/local/your_service_start.sh" >> /etc/rc.d/rc.local

五、crontab 方案

5.1 适用范围

适用于需要灵活调度任务的场景,可实现开机启动以及按特定时间间隔执行任务。

5.2 设置开机启动

使用@reboot关键字实现开机启动功能。例如,开机时执行/usr/local/daemonProcess/somescript.sh脚本:

bash 复制代码
crontab -e
bash 复制代码
#### 在打开的文件中添加以下内容
@reboot /usr/local/daemonProcess/somescript.sh

5.3 特殊关键字及执行时间

@reboot:重启时执行一次,实测比/etc/rc.d/rc.local更早执行(提前 1 - 2s),比默认 1 分钟定时提前 30s 左右。

@yearly:一年执行一次,1 月 1 号 0 点 0 分执行,等同于@annually。

@monthly:一月执行一次,每月 1 号 0 点 0 分执行。

@weekly:一周执行一次,即"0 0 * * 0"。

@daily:一天执行一次,即"0 0 * * *"。

@hourly:一小时执行一次,即"0 * * * "。
5.4 特别注意
是否同时使用@reboot和定时任务,需根据实际业务需要决定。若守护定时设置为 1 分钟(即
* * * *),建议不再设置@reboot,以免开机启动后的 1 分钟内重复执行;若守护定时间隔较大,建议同时使用@reboot,确保应用服务及时启动。

六、生产环境开机启动方案建议

在生产环境中,建议只采用一种开机启动方案,确保所有组件、服务统一,便于服务较多时的快速运维。比如,有些服务默认安装时不会自动生成系统服务,所以 systemctl 方式不能适用生产环境中所有组件、服务。如果此时按照各组件、服务分别制定开机启动方案,则在后续如果服务启动异常或服务发版时,就需要明确识别各服务的开机启动方案,然后做相应的操作,提高运维成本,增加出错概率。

七、开机启动脚本示例

7.1 追加启动命令到 /etc/rc.local 或 /etc/rc.d/rc.local

bash 复制代码
chmod +x /etc/rc.d/rc.local
bash 复制代码
# 开机启动脚本/usr/local/AutoStartOnBoot.sh
chmod +x /usr/local/AutoStartOnBoot.sh
# 本脚本需要依赖/etc/rc.d/rc.local
# rc.local在加载环境变量之前执行,所以此处需要人工加载
source /etc/profile

八、总结

通过本文档介绍的多种开机自启动方案,用户可以根据不同的服务类型和业务需求,选择最合适的方法来实现 Linux 系统服务的开机自启动。在生产环境中,统一的开机自启动方案有助于降低运维成本,提高系统的稳定性和可维护性。

相关推荐
kfepiza12 分钟前
Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由
linux·网络·tcp/ip·ubuntu·debian·ip·tcp
Esun_R20 分钟前
使用防火墙与 fail2ban 防止公网服务器被攻击
linux
雷渊21 分钟前
深入分析mybatis中#{}和${}的区别
java·后端·面试
亦是远方27 分钟前
2025华为软件精英挑战赛2600w思路分享
android·java·华为
花月C41 分钟前
Spring IOC:容器管理与依赖注入秘籍
java·开发语言·rpc
ylfhpy1 小时前
Java面试黄金宝典22
java·开发语言·算法·面试·职场和发展
老友@1 小时前
Kafka 全面解析
服务器·分布式·后端·kafka
榆榆欸1 小时前
4.Socket类、InetAddr类、Epoll类实现模块化
linux·c++·tcp/ip
风象南1 小时前
Spring Boot 实现文件秒传功能
java·spring boot·后端
橘猫云计算机设计1 小时前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计