Linux自启动设置 && shell脚本编写

前情提要

  • 由于本次的功能需求需要在Linux机器每次重启之后运行相应的脚本,因此需要设置开机自启动
  • auto_monitor.sh脚本需要root权限
  • auto_mykibana.sh脚本需要等待elasticsearch启动之后才能执行

Linux自启动设置

  • 方案一:设置/etc/init.d中的内容,然后使用update-rc.d来进行开机自启动设置

    • 背景知识:

      • Linux系统的主要启动步骤

        # 读取MBR信息,启动Boot Manager
        # 加载系统内核,启动init进程,init进程使Linux的根进程,所有的系统进程都是它的子进程
        # init进程读取 /etc/inittab 文件中的信息,进入预设的运行级别。通常情况 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录
        # 根据 /etc/rcS.d/ 文件夹中对应的脚本启动Xwindows服务器xorg,Xwindows为Linux的图形界面
        # 启动登陆管理器,等待用户登陆
        
      • Ubuntu中的运行级别

        level 0                                 # 停机
        level 1                                 # 单用户
        level 2&3                               # 多用户
        level 4                                 # 用户自定义
        level 5                                 # 系统一般运行状态
        level 6                                 # 重启
        
        • 注释:这里写的这些级别这样说可能不太容易理解,但是实际上有一个很简单的理解方式

          init 0                                  # 关机
          init 1                                  # 
          init 2&3                                # 开启命令行界面
          init 4                                  # 
          init 5                                  # 开启图形界面
          init 6                                  # 重启
          
    • 脚本编写规范及样例,如:xxx.sh

      #! /bin/bash                                                          
      ### BEGIN INIT INFO
      #Provides:       touchfile
      #Required-Start: $all
      #Required-Stop:  $all
      #Default-Start:  2 3 4 5
      #Default-Stop:   0 1 6
      #Short-Description:  Run Touchfile
      #Description:    Run Touchfile
      ### END INIT INFO
      
      TOUCHFILE="/var/tmp/touch.file"
      case "$1" in 
      start)
              echo "Creating $TOUCHFILE"
              touch $TOUCHFILE
      ;;
      stop)
              echo "Removing $TOUCHFILE"
              touch $TOUCHFILE
      ;;
      restart)
              echo "Recreating $TOUCHFILE"
              rm $TOUCHFILE
              touch $TOUCHFILE
      ;;
      reload)
              echo "Re-Touching $TOUCHFILE"
              touch $TOUCHFILE
      ;;
      *)
              echo "Usage: touchfile.sh <start|stop|restart|reload>"
      ;;
      esac
      exit 0
      
    • 编写之后的操作

      root$: chmod a+x xxx.sh                         # 使其变成可执行文件
      root$: update-rc.d xxx.sh defaults 90           # 添加开机启动项,启动次序为第90个
      root$: update-rc.d xxx.sh -f remove                # 删除开机启动项
      
  • 方案二:设置/lib/systemd/system中的内容,编写xxx.service,然后利用systemctl命令设置服务

    • service的编写规范及样例:

      [Unit]                                          
      Description = start mykibana                    # 服务描述,随便写
      After = network.target                          # 开机时在网络服务启动后开启
      
      [Service]                                       
      User = root                                     # 服务开启用户类型
      ExecStart = /bin/sh /home/mykibana.sh           # 服务具体执行内容
      
      [Install]                                       
      WantedBy = multi-user.target                    
      
    • 服务写完后,注册服务的指令及含义:

      $: systemctl enable xxx.service             # 设置服务开机启动
      $: systemctl start xxx.service              # 开启服务
      $: systemctl stop xxx.service               # 关闭服务
      $: systemctl disable xxx.service            # 删除服务
      
    • 服务注册后,在开机后查看服务的运行状态及日志信息

      $: systemctl status xxx                     # 查看服务的运行状态及日志信息
      
  • 方案三:对于rc.local进行修改,此处不建议,由于该方案与方案一类似均为兼容性设置,现在的主流设置为方案二

其他内容

  • pyinstaller将python编译为可执行文件

    $: pip install pyinstaller                      #这里注意不是apt安装
    $: pyinstaller -F xxx.py                        #这里记得加上-F,不然更换路径后就无法找到依赖,这个选项是只生成一个可执行文件
    
    ### 注释:生成的可执行文件在dist目录下
    
  • 更换ssh默认端口

    • 修改/etc/ssh/sshd_config文件

      port 22 --> port xxx
      
  • ssh互相免认证

    • 首先在两边都生成密钥:

      $: ssh-keygen -t rsa
      
    • 然后使用命令将公钥互相拷贝过去:

      $: ssh-copyid -i username@ip
      
    • 修改StrictHostKeyChecking ask 中的内容为:

      StrictHostKeyChecking no
      
  • inotify使用方法

  • rsync使用方法

    这两者结合起来就可以实现文件的实时同步
    
0%