• Linux下实现程序开机自启(rc.local 和 systemctl)


    需求:

    实现了一个程序,需要在ubuntu上跑起来。能开机自启,且崩溃了也能自己重启。有两种实现方式,个人推荐第二种。

    方式1:

    实现方式:

    直接将要启动程序的运行命令加在 /etc/rc.local 中,开机时会运行这里的命令。
    我使用时:写了一个脚本DDR_Guard.sh,在脚本里面循环判断程序有没有开启。如果没有开启,则调用相应的启动指令。
    比如:

    注意:

    1)此方式在Ubuntu20.04之后就取消了,只在Ubuntu16.04中测试可行。
    2)在 /etc/rc.local 中的命令一定要可以结束,如果结束不了会导致系统开不起来。所以我用了后台运行:也就是nohup。

    方式2(推荐使用):

    采用systemctl的方式,好像很挺方便的样子。(实际用时把youngtest换成自己需要的名字即可)

    强烈建议看看这个文档,里面介绍了一些参数的具体含义:https://ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

    准备工作:

    1)为了测试,我写了一个程序test0726,里面循环往一个文件里面输入一句话。
    2)还写了一个脚本:youngtest.sh

    复制代码
    #!/bin/bash
    cd /home/dadao/workspace/test/systemctltestLog
    v_time=`date "+%Y_%m_%d_%H_%M_%S"`
    echo $v_time" Start runing ++++++++++++++++++++ " >> youngtestsh.log
    ./test0726
    echo $v_time" Process quit ---------------------- " >> youngtestsh.log
    复制代码

    3)需要有执行权限:chmod +x youngtest.sh test0726

    如何配置:

    1)编写一个 youngtest.service,内容如下:

    复制代码
    [Unit]
    Description=test
    
    [Service]
    Type=simple
    User=dadao
    ExecStart=/home/dadao/workspace/test/systemctltestLog/youngtest.sh
    Restart=always
    RestartSec=30
    StartLimitInterval=0
     
    [Install]
    WantedBy=multi-user.target graphical.target
    复制代码

    以下参数根据实际需要进行配置:

    User:表示以哪个用户启动,不写默认是root。

    ExecStart:就是要执行的语句。

    Restart=always: 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no。还可以配置有条件重启,具体参考上述文档。
    RestartSec=5: 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)
    StartLimitInterval: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启

    2)拷贝到: /lib/systemd/system  可能还要注意权限问题。

    3)修改配置文件后需要重加载配置:

    sudo systemctl daemon-reload

    4)设置开机自启:

    sudo systemctl enable youngtest.service

    之后就可以直接重启了。

    5)之后就可以操作了:
    启动:

    sudo systemctl start youngtest.service

    停止:

    sudo systemctl stop youngtest.service

     查看状态:

    sudo systemctl status youngtest.service

    测试自动重启功能:

     

  • 相关阅读:
    Nacos
    软考 系统架构设计师系列知识点之软件架构风格(1)
    使用 shell 脚本: 关闭特定进程
    elment小结
    vLLM-prefix浅析(System Prompt,大模型推理加速)
    图像处理与计算机视觉--第一章-计算机视觉简介-10问
    Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】
    【机器学习】21天挑战赛学习笔记(五)
    C/C++学生综合测评系统
    Linux 中【/】、【./】、【.】之间区别
  • 原文地址:https://www.cnblogs.com/xcywt/p/17582643.html