Linux实现脚本开机自启动

参考链接:https://blog.csdn.net/weixin_40343504/article/details/82457990

Ubuntu系统实现脚本开机自启动

0、序言

  很多时候,我们使用Linux时,为了方便操作,需要用到一些自启动的脚本,对于不同的Linux系统来说,自启动方式各有不同,我这里记录的是Ubuntu 20.0系统的;文章后面会补充参考链接的博客部分内容,仅供参考学习使用。该方法也可以用在移植系统时,把开机启动服务移植进去。  

  在 Ubuntu 16以前,有个很简单的 rc.local ,在这个文件内写上你要执行的命令,在开机后,系统就会以管理员权限去执行这些命令。但是,这个启动脚本的控制粒度并不是很精细。所以,在Ubuntu18 版本开始,Ubuntu使用了 systemd 替代了 initd 管理系统。并且默认已经取消了 /etc/rc.local 文件,如果要在 Ubuntu16 以后使用 rc.local 这个方法,可以参考我i另一篇博文:https://www.cnblogs.com/xingboy/p/15696526.html

1、建立开机启动服务

  跳转到 /etc/systemd/system 文件夹,移植系统时也是到你的文件系统的这个文件夹;

  新建开机启动服务 sudo vim my_start.service

  [Unit]
  
  #该文件是自己建立的启动服务文件,
  #/bin/my_start.sh 是你要启动的脚本所在的路径以及文件名,其他保持默认格式即可
 
  Description=/bin/my_start.sh Compatibility
  ConditionPathExists=/bin/my_start.sh
  
  [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界面显示执行的具体进程)**

 

二、Suse 系统如下
  1.suse15
    1)将需要开机启动脚本xxx.sh复制到 /etc/profile.d
      chmod 777 xxx.sh
    2)将系统改成root 自动登录
      vi /etc/sysconfig/displaymanager
      displaymanager-autologin=“root”

  备注:
    a.安装suse15系统参考:http://morecoder.com/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做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令

 

posted @ 2021-09-17 15:53  白菜没我白  阅读(2816)  评论(0编辑  收藏  举报