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 系统服务的开机自启动。在生产环境中,统一的开机自启动方案有助于降低运维成本,提高系统的稳定性和可维护性。

相关推荐
m0_465215794 分钟前
TCP & UDP Service Model
服务器·网络·tcp/ip
字节全栈_rJF18 分钟前
性能测试 —— Tomcat监控与调优:status页监控_tomcat 自带监控
java·tomcat
爱编程的小新☆2 小时前
Java篇之继承
java·开发语言
gentle coder2 小时前
Redis_Redission的入门案例、多主案例搭建、分布式锁进行加锁、解锁底层源码解析
java·redis·分布式
萝卜青今天也要开心2 小时前
读书笔记-《Redis设计与实现》(一)数据结构与对象(下)
java·数据结构·redis·学习
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS景区民宿预约系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
太阳伞下的阿呆2 小时前
排查定位jar包大文件
java·centos·jar
MyY_DO2 小时前
maven mysql jdk nvm node npm 环境安装
java·mysql·maven
chian-ocean3 小时前
从理论到实践:Linux 进程替换与 exec 系列函数
linux·运维·服务器
拎得清n3 小时前
UDP编程
linux