Linux 设置服务开机启动的三种方法

温馨提示:本文最后更新于2025-05-01 23:55:13,某些文章具有时效性,若有错误或下载地址失效,请在文末评论区留言

通过rc.local文件添加自启动命令

rc.local 是系统启动时执行的最后一个脚本,适合简单命令的快速添加。适用于所有Linux发行版(包括较旧的版本),但不推荐用于需要复杂服务管理的场景。​操作步骤:

​1、编辑rc.local文件

sudo vi /etc/rc.local  # 使用vi编辑器打开文件

PS:若文件不存在,需先创建:sudo touch /etc/rc.local && sudo chmod +x /etc/rc.local

2、​在文件末尾添加命令。在 exit 0 行之前插入要执行的命令。例如启动名为 hello.sh 的脚本:

/usr/local/hello.sh  # 直接执行脚本(需赋予脚本+x权限)
# 或
cd /usr/local && ./hello.sh  # 进入目录后执行

3、设置rc.local可执行权限

sudo chmod +x /etc/rc.local

​注意事项:

●命令必须能在非交互式环境中运行(无GUI、无用户输入)。
●部分现代Linux发行版(如Ubuntu 16.04+、CentOS 7+)默认禁用rc.local,需手动启用。

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

SysV init系统通过运行 /etc/init.d/ 下的脚本启动服务,脚本需遵循特定格式(如定义start、stop等操作)。适用于传统SysV init系统的Linux发行版(如旧版Ubuntu、CentOS 6)。​缺点:依赖运行级别(runlevel),管理复杂服务时不够灵活。操作步骤:

1、​创建自启动脚本。在 /etc/init.d/ 目录下新建脚本文件,例如 my_service:

sudo vi /etc/init.d/my_service

2、​编写脚本内容。脚本需包含启动、停止、重启等功能,示例模板:

#!/bin/bash
# chkconfig: 2345 20 80  # 定义服务运行级别和优先级
# description: My Custom Service

case "$1" in
    start)
        echo "Starting my service..."
        /path/to/your/command
        ;;
    stop)
        echo "Stopping my service..."
        /path/to/stop/command
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
exit 0

3、设置脚本权限

sudo chmod +x /etc/init.d/my_service

4、注册服务到系统启动项

sudo update-rc.d my_service defaults  # Debian/Ubuntu
sudo chkconfig --add my_service      # CentOS/RHEL

通过systemd服务实现开机自启动(推荐)

systemd是新一代初始化系统,提供更强大的服务管理功能(如并行启动、依赖管理、日志记录)。现代Linux发行版(如Ubuntu 16.04+、CentOS 7+、Fedora等),推荐用于服务管理。操作​步骤​(以Nginx为例):

1、安装systemd。如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

​2、创建systemd服务文件。在 /etc/systemd/system/ 目录下创建 .service 文件:

sudo vi /etc/systemd/system/nginx.service

3、编写服务配置

[Unit]
Description=Nginx Web Server  # 服务描述
After=syslog.target network.target  # 依赖的服务

[Service]
Type=forking  # 服务类型(守护进程模式)
ExecStart=/usr/local/nginx/sbin/nginx  # 启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload  # 重载配置
ExecStop=/usr/local/nginx/sbin/nginx -s stop  # 停止命令
PrivateTmp=true  # 使用独立临时目录

[Install]
WantedBy=multi-user.target  # 服务启动的目标(多用户模式)

4、重载systemd配置并启用服务

sudo systemctl daemon-reload  # 重新加载配置
sudo systemctl enable nginx   # 设置开机启动
sudo systemctl start nginx    # 立即启动服务

5、管理服务状态

sudo systemctl status nginx   # 查看服务状态
sudo systemctl restart nginx  # 重启服务
sudo systemctl disable nginx  # 禁用开机启动

关键配置项:

[Unit]:定义服务基本信息和依赖关系。
[Service]:指定服务启动、停止等行为。
[Install]:定义服务安装时的目标(如multi-user.target对应系统运行级别3)。

示例:

三种方法对比

方法
优点
缺点
适用场景
​rc.local
简单快捷,无需额外配置
兼容性差(部分新系统禁用)
快速测试或简单命令
​init.d脚本
传统可靠,适合旧系统
管理复杂,依赖运行级别
旧版Linux系统
​systemd服务
功能强大,管理灵活
需学习新语法
现代Linux发行版首选

注意事项

​1、脚本路径:确保命令或脚本使用绝对路径,避免因环境变量问题导致失败
2、​权限问题:所有脚本和目录需有执行权限(chmod +x)
3、​依赖关系:若服务依赖网络、数据库等,需在[Unit]中声明(如After=mysql.service)
4、​日志排查:使用journalctl -u 服务名查看systemd服务的日志

通过以上方法,可根据实际需求选择最适合的开机启动配置方式。

© 版权声明
THE END
如果觉得这篇文章对您有帮助,可以收藏本网址,方便下次访问!
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容