• 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

    测试自动重启功能:

     

  • 相关阅读:
    Redis集群模式和常用数据结构
    node版本问题:Error: error:0308010C:digital envelope routines::unsupported
    MySQL 5.7安装教程(win11)
    Java数学工具类Math
    《微信小程序-进阶篇》Lin-ui组件库源码分析-列表组件List(一)
    【菜鸡学艺–Vue2–001】模板语法&声明式渲染
    【微信小程序】button和image组件的基本使用
    AI干货大FUN送!程序员节来AI Show“集市”行乐
    MQ高级-服务异步通信
    程序三高的方法
  • 原文地址:https://www.cnblogs.com/xcywt/p/17582643.html