推荐使用systemd服务单元文件实现开机自启:创建/etc/systemd/system/myjob.service,配置unit[install]三段,赋予脚本可执行权限,执行daemon-reload后启用enable。

如果您在Linux系统中编写了一个自定义脚本,希望它在每次系统启动时自动运行,则需根据当前系统的初始化系统选择对应机制。以下是多种兼容主流发行版的设置方法:
一、使用systemd服务单元文件(推荐用于现代发行版)
systemd是CentOS 7+、Ubuntu 16.04+、Debian 8+等主流发行版默认的初始化系统。通过创建.service文件可实现脚本的标准化管理与开机自启。
1、创建服务单元文件:使用vim在/etc/systemd/system/目录下新建一个以.service结尾的文件,例如myjob.service。
2、编辑文件内容,填入标准单元配置:
[Unit]
Description=My Custom Script
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
3、确保脚本具有可执行权限:运行sudo chmod +x /usr/local/bin/myscript.sh。
4、重载systemd配置:执行sudo systemctl daemon-reload。
5、启用开机自启:运行sudo systemctl enable myjob.service。
二、通过/etc/rc.local执行(兼容性广,适用于多数systemd及SysVinit系统)
/etc/rc.local是一个传统启动脚本,在系统完成基本初始化后按顺序执行其中命令,无需额外服务注册,适合作为轻量级启动入口。
1、编辑rc.local文件:运行sudo vim /etc/rc.local。
2、确认文件首行为#!/bin/bash,并确保该行存在且未被注释。
3、在exit 0语句之前添加您的脚本调用命令,例如:/usr/local/bin/myscript.sh > /var/log/myscript.log 2>&1。
4、赋予rc.local可执行权限:执行sudo chmod +x /etc/rc.local。
5、在systemd系统中启用rc-local服务(如未启用):运行sudo systemctl enable rc-local并检查状态sudo systemctl status rc-local。
三、使用SysVinit风格启动脚本(适用于CentOS 6、Ubuntu 14.04等旧版系统)
在仍使用SysVinit的系统中,需将脚本置于/etc/init.d/目录并注册到运行级别,由update-rc.d或chkconfig管理启动时机。
1、编写启动脚本:使用vim创建/etc/init.d/myscript,内容须包含标准LSB头信息。
2、在脚本开头插入必要注释块:
#!/bin/bash
### BEGIN INIT INFO
# Provides: myscript
# Required-Start: $local_fs $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Run my custom script at boot
### END INIT INFO
3、在脚本主体中定义start、stop等动作逻辑,例如start()函数内调用/usr/local/bin/myscript.sh。
4、赋予脚本可执行权限:运行sudo chmod +x /etc/init.d/myscript。
5、注册至启动序列:对Debian/Ubuntu系执行sudo update-rc.d myscript defaults;对RHEL/CentOS系执行sudo chkconfig --add myscript && sudo chkconfig myscript on。
四、利用crontab @reboot指令(无需特权即可配置用户级启动)
crontab的@reboot时间标识允许非root用户在系统启动时触发一次任务,适用于仅需运行单次、不依赖系统服务生命周期的场景。
1、编辑当前用户的crontab:运行crontab -e。
2、在文件末尾新增一行:@reboot /usr/local/bin/myscript.sh > /tmp/myscript_boot.log 2>&1。
3、保存退出。下次重启后,该命令将在用户上下文中执行。
4、注意:此方式不保证网络就绪或文件系统完全挂载,若脚本依赖网络或特定挂载点,需自行加入等待逻辑。
五、放置于/etc/profile.d/目录(仅限登录会话生效)
/etc/profile.d/下的shell脚本会在每个交互式登录shell启动时执行,适用于需要为所有用户设置环境变量或运行初始化命令的场景,但不适用于系统级后台服务。
1、创建脚本文件:运行sudo vim /etc/profile.d/myscript.sh。
2、在文件中写入要执行的命令,例如:/usr/local/bin/myscript.sh &(注意添加&使其后台运行)。
3、设置执行权限:sudo chmod +x /etc/profile.d/myscript.sh。
4、该脚本将在每次用户登录Shell时触发,而非系统启动时刻,因此不满足真正意义上的“开机自启动”要求。











