zoukankan      html  css  js  c++  java
  • Ubuntu 18 使用 rc.local执行开机启动脚本【转】

    说明  

      在调试 Ubuntu20.0 开机启动的时候,用了 systemd  的方法,该方法可以参考我的另一个篇博文:https://www.cnblogs.com/xingboy/p/15305027.html,感觉这个方法还要在系统烧录后,输入一次启动命令,感觉不够方便,就重新找了该方法,方法已经验证可行,这里转发记录仅供参考学习使用,原文链接:https://blog.csdn.net/qq_36963372/article/details/102651661 。

    Ubuntu 18 开机启动  

      在 Ubuntu 16以前,有个很简单的 rc.local ,在这个文件内写上你要执行的命令,在开机后,系统就会以管理员权限去执行这些命令。但是,这个启动脚本的控制粒度并不是很精细。
    所以,在Ubuntu18 版本开始,Ubuntu使用了 systemd 替代了 initd 管理系统。并且默认已经取消了 /etc/rc.local 文件。

    配置 rc.local.service

      vim /lib/systemd/system/rc.local.service  注意:可能你的系统的文件不是 rc.local.service 而是 rc-local.service ,这两个文件内容实际是一样的,我的 Ubuntu20.0 的文件名就是这个 rc-local.service,这样你就是要修改 rc-local.service

           rc.local.service (rc-local.service)内容

    [Unit]
    Description=/etc/rc.local Compatibility
    Documentation=man:systemd-rc-local-generator(8)
    ConditionFileIsExecutable=/etc/rc.local
    After=syslog.target network.target remote-fs.target nss-lookup.target
     
    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    RemainAfterExit=no
    GuessMainPID=no
     
    #这一段原文件没有,需要自己添加
    [Install]
    WantedBy=multi-user.target
    Alias=rc-local.service
    #===================

      rc.local.service (rc-local.service)内容解释

     [Unit] #区块:启动顺序与依赖关系。
    
     ConditionFileIsExecutable=/etc/rc.local
     After=network.target
    
     ConditionFileIsExecutable #指定了执行的文件
    
     After #表示在 network.target 这个target后面进行执行。也就是网络启动完成之后,执行 /etc/rc.local 文件。
    
     [Service] #区块:启动行为,如何启动,启动类型。
    
     Type=forking
     ExecStart=/etc/rc.local start
     TimeoutSec=0
     RemainAfterExit=yes
     GuessMainPID=no
    
     [Install] #区块,定义如何安装这个配置文件,即怎样做到开机启动。
     WantedBy=multi-user.target
     Alias=rc-local.service
    
     #[Install] 块是我们自己编辑新增的。

    添加服务文件  

      添加软链接,将 /lib/systemd/system/rc.local.service(或者 rc-local.service 文件) 链接到 /etc/systemd/system/rc.local.service 系统在开机后会自动去 /etc/systemd/system/ 目录下读取需要启动的服务配置。如果你是想在系统移植的时候实现,无法添加软连接,那你可以直接把 /lib/systemd/system/rc.local.service 文件复制到 /etc/systemd/system/rc.local.service 直接复制文件过去也能达到软连接的目的。

    ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/rc.local.service

    新建或者编辑rc.local 文件

      sudo vim /etc/rc.local

      写入测试命令

    #!/bin/bash
    
    # 将你需要执行的命令写在这里,禁止写入死循环命令,如果写入死循环,虽然可以正常开机使用,不过你的Debug调试口就会一直卡在死循环里,无法进行debug
    echo "hello" > /home/test.log
    
    exit 0

    设置文件执行权限

      sudo chmod 755 /etc/rc.local

      如果你是在 /etc/systemd/system/ 目录下创建的文件,也要加上执行权限。

    验证  

      重启主机,检查 /home/ 下是否有 test.log 文件。如果一切正常,在 /home/test.log 文件内,可以看到 hello。

  • 相关阅读:
    【转】HTML5的小知识点小集合
    11月15日下午 ajax返回数据类型为XML数据的处理
    11月15日下午 用代码操作文件(文件夹)
    11月15日上午文件上传
    11月14日用AJAX、PHP、SESSION做购物车
    各种进位制转换
    11月13日上午ajax返回数据类型为JSON数据的处理
    11月13日上午省、市、区(县)三级联动
    11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
    11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
  • 原文地址:https://www.cnblogs.com/xingboy/p/15696526.html
Copyright © 2011-2022 走看看