推荐使用systemd服务单元:创建/etc/systemd/system/myscript.service文件,配置unit、service、install三节,设execstart指向脚本,启用并重载;其次可选rc.local、crontab @reboot或sysv init方式。

如果您希望某个脚本在Linux系统启动时自动运行,则需要将其集成到系统的初始化流程中。以下是几种兼容主流发行版的设置方法:
一、使用systemd服务单元(推荐用于CentOS 7+/Ubuntu 16.04+)
systemd是现代Linux发行版默认的初始化系统,通过创建自定义service文件可实现精准控制启动时机、依赖关系与运行用户。
1、创建服务文件:sudo nano /etc/systemd/system/myscript.service
2、写入以下内容(根据实际路径和需求修改):
[Unit]
Description=My Startup Script
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash /opt/myscript.sh
RemainAfterExit=yes
User=root
[Install]
WantedBy=multi-user.target
3、赋予脚本执行权限:sudo chmod +x /opt/myscript.sh
4、重载配置并启用服务:sudo systemctl daemon-reload && sudo systemctl enable myscript.service
二、将脚本添加至/etc/rc.local(适用于保留rc.local的发行版)
/etc/rc.local是一个传统且兼容性广的启动入口,在系统进入多用户模式前执行其中命令,需确保rc-local服务已启用。
1、确认rc-local服务状态:sudo systemctl list-unit-files | grep rc-local
2、若显示disabled,需先创建软链接或启用:sudo systemctl enable rc-local
3、编辑rc.local文件:sudo nano /etc/rc.local
4、在exit 0之前插入脚本调用行:/bin/bash /opt/myscript.sh > /var/log/myscript.log 2>&1
5、赋予rc.local执行权限:sudo chmod +x /etc/rc.local
三、通过crontab @reboot指令启动
crontab的@reboot语法允许在每次系统启动时触发任务,不依赖特定初始化系统,适合轻量级或用户级脚本。
1、编辑root用户的crontab:sudo crontab -e
2、添加一行:@reboot /bin/bash /opt/myscript.sh > /tmp/myscript_boot.log 2>&1
3、保存退出后,cron守护进程将自动加载该规则。
四、放入/etc/init.d并注册为SysV服务(仅限仍使用SysV init的旧系统)
该方法适用于Debian 7/8、CentOS 6等基于SysV init的系统,需编写符合LSB标准的init脚本。
1、创建脚本文件:sudo nano /etc/init.d/myscript
2、写入包含#!/bin/sh头及start/stop/restart函数的完整脚本,并在头部添加LSB注释块
3、赋予执行权限:sudo chmod +x /etc/init.d/myscript
4、注册服务:sudo update-rc.d myscript defaults(Debian系)或 sudo chkconfig --add myscript(RHEL系)









