Linux实现脚本开机⾃启动
参考链接:
Ubuntu系统实现脚本开机⾃启动
0、序⾔
  很多时候,我们使⽤Linux时,为了⽅便操作,需要⽤到⼀些⾃启动的脚本,对于不同的Linux系统来说,⾃启动⽅式各有不同,我这⾥记录的是Ubuntu 20.0系统的;⽂章后⾯会补充参考链接的博客部分内容,仅供参考学习使⽤。该⽅法也可以⽤在移植系统时,把开机启动服务移植进去。 
  在 Ubuntu 16以前,有个很简单的 rc.local ,在这个⽂件内写上你要执⾏的命令,在开机后,系统就会以管理员权限去执⾏这些命令。但是,这个启动脚本的控制粒度并不是很精细。所以,在Ubuntu18 版本开始,Ubuntu使⽤了 systemd 替代了 initd 管理系统。并且默认已经取消了 /etc/rc.local ⽂件,如果要在 Ubuntu16 以后使⽤ rc.local 这个⽅法,可以参考我i另⼀篇博⽂:。
1、建⽴开机启动服务
  跳转到/etc/systemd/system⽂件夹,移植系统时也是到你的⽂件系统的这个⽂件夹;
  新建开机启动服务sudo vim my_start.service
[Unit]
#该⽂件是⾃⼰建⽴的启动服务⽂件,
#/bin/my_start.sh 是你要启动的脚本所在的路径以及⽂件名,其他保持默认格式即可
Description=/bin/my_start.sh Compatibility
ConditionPathExists=/bin/my_start.s h
[Service]
Type=forking
ExecStart=/bin/my_start.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
  给启动服务添加权限sudo chmod 777 my_start.service
2、创建要⾃启动的脚本
  因为我在第⼀步的启动服务⾥声明的启动脚本路径以及名称,所以建⽴的启动脚本名称路径要跟启动服务⾥声明的⼀致;
跳转到启动服务⾥声明的/bin⽬录,添加启动脚本vim my_start.sh
#!/bin/sh
#该⽂件为⾃定义开机启动脚本,可以⽤该脚本执⾏⼀些你需要开机启动的脚本
PASSWORD="your_password"
#你如果做系统移植时,可以把 roo t的密码参数设置为 export,然后这⾥设置为 PASSWORD=${ROOT_PASSWORD},就是直接提取你的 root 密码
#具体你的系统保持密码的参数是什么要看你的移植的系统了,我的是 ROOT_PASSWORD
echo ${PASSWORD} | sudo -S /bin/myStart/set_net_core.sh #echo ${PASSWORD} | sudo -S 是实现脚本⾃动把执⾏sudo命令时要输⼊的密码输⼊进去
#我在这⾥的脚本实现的是:启动 /bin/myStart ⽂件夹⾥的 set_net_core.sh 脚本
#这种⽅法的好处就是我只需要做⼀个启动服务专门⽤来执⾏⼀个脚本去执⾏其他脚本,这样后续还有新的需要开机⾃启动脚本就只需要把执⾏命令写⼊到这⾥即可
  给启动脚本添加权限 sudo chmod 777 my_start.sh
3、启动脚本⾃启动服务
  跳转到/etc/systemd/system⽂件夹,其实不进⼊也⾏,我这⾥为了加深记忆才重新进⼊⼀次;
执⾏指令sudo systemctl enable my_start.service启动脚本⾃启动服务,然后使⽤指令reboot重启你的系统;
  如果你是做系统移植需要⽤到的,你需要移植完系统,烧录后执⾏⼀次该指令,只需要执⾏⼀次即可,后续你断电关机重启都不⽤执⾏了。
以下内容转⾃参考链接,补充其他系统的部分
⼀、CentOS系统和Redhat系统如下:
  1.修改/etc/rc.d/rc.local为
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
source /root/Desktop/start.sh
  “sourece /root/Desktop/start.sh”为要添加开机⾃启动的脚本,并且要给“/root/Desktop/start.sh”赋予执⾏权限(chmod +x /root/Desktop/start.sh)
  2.chmod 777 rc.local
  3.重启系统后就会开始执⾏预设置执⾏的脚本。(此种⾃启动⽅式不会在GUI界⾯显⽰执⾏的具体进程)**linux循环执行命令脚本
⼆、Suse 系统如下:
  1.suse15
    1)将需要开机启动脚本xxx.sh复制到 /etc/profile.d
      chmod 777 xxx.sh
    2)将系统改成root ⾃动登录
      vi /etc/sysconfig/displaymanager
      displaymanager-autologin=“root”
  备注:
    a.安装suse15系统参考:morecoder/article/1120393.html
    b.查看OS IP指令为“ip -4 address”
    c.远程连接请⽤putty,ssh ⼯具⽆法使⽤。
  2.Suse12
    1.修改/etc/init.d/下⾯有个boot.local为:
#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany.  All rights reserved.
#
# Author: Werner Fink, 1996
#        Burchard Steinbild, 1996
#
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#
source /root/Desktop/start.sh
    “sourece /root/Desktop/start.sh”为要添加开机⾃启动的脚本,并且要给“/root/Desktop/start.sh”赋予执⾏权限(chmod +x /root/Desktop/start.sh)
    2.重启系统后就会开始执⾏预设置执⾏的脚本。(此种⾃启动⽅式不会在GUI界⾯显⽰执⾏的具体进程)
在Redhat Redflag centOS fc linux系统⾥⾯脚本的启动先后顺序:
  第⼀步:通过/boot/vm进⾏启动 vmlinuz
  第⼆步:init /etc/inittab
  第三步:启动相应的脚本,并且打开终端
    rc.sysinit
    rc.d(⾥⾯的脚本)
    rc.local
  第四步:启动login登录界⾯ login
  第五步:在⽤户登录的时候执⾏sh脚本的顺序:每次登录的时候都会完全执⾏的
    /etc/profile.d/file
    /etc/profile
    /etc/bashrc
    /root/.bashrc
    /root/.bash_profile
  Redhat中的运⾏模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后⼀个,所以⽤户可以⾃⼰在这个⽂件中添加⼀些需要在其他初始化⼯作之后,登录之前执⾏的命令

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。