[Linux学习笔记]添加自己的开机自启动脚本

56 阅读1分钟

systemd初始化系统(现代Debain系)

此处以固定ip为例,需先在/etc/systemd/system/目录下创建对应的服务:

 sudo vi /etc/systemd/system/set-static-ip.service

写入内容

[Unit]
Description=Set static IP for eno1
After=network-pre.target
Before=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/ip link set eno1 up || true"
ExecStart=/usr/bin/sh -c "/usr/bin/ip addr flush dev eno1 || true"
ExecStart=/usr/bin/sh -c "/usr/bin/ip addr add 192.168.56.2/24 dev eno1 || true"

[Install]
WantedBy=multi-user.target

完成后执行

sudo systemctl daemon-reload

来重新加载服务配置到内存,system.d默认扫描路径如下:

/etc/systemd/system/,/lib/systemd/system/,/usr/lib/systemd/system/ 加载完我们新建的服务后即可启动我们创建的服务:

sudo systemctl enable set-static-ip.service

此时会输出:

Created symlink /etc/systemd/system/multi-user.target.wants/set-static-ip.service → /etc/systemd/system/set-static-ip.service.

说明服务已经被成功添加到自启动,此时如果要立刻运行服务,使用指令:

sudo systemctl start set-static-ip.service

如果要立刻关闭服务,使用指令:

sudo systemctl stop set-static-ip.service

如果要删除自启动服务,使用指令:

sudo systemctl disable set-static-ip.service

BusyBox init初始化系统(Buildroot / Yocto)

此处以启动自定义脚本/usr/bin/myscript.sh为例,需先在/etc/init.d目录下创建对应的脚本:

cd /etc/init.d
vi S99myscript

写入内容:

#!/bin/sh
# Start my custom script

case "$1" in
  start)
    /usr/bin/myscript.sh &
    ;;
  stop)
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

赋予可执行性权限

chmod +x S99myscript
chmod +x /usr/bin/myscript.sh

Tips:

  • 文件名 S99myscript 中的数字 99 表示启动顺序,越大越晚启动
  • 可以保证脚本在网络或其他服务启动后运行
  • BusyBox init 会按 /etc/inittab 中配置调用 /etc/init.d 脚本
  • 如果需要立即执行,可以手动调用:/etc/init.d/S99myscript start