• systemd 强大的初始化系统和服务管理器


    在Linux下,systemd 是一个非常强大的初始化系统和服务管理器,
    它可以用来管理各种系统服务和进程。如果想要使用 systemd 来监控一个进程,
    并在它退出时自动重新启动它,可以为该进程创建一个 systemd 服务单元文件。

    以下是如何为一个进程创建一个简单的 systemd 服务单元文件,并在进程退出时自动重启它的步骤:

      以a.out为例子,改程序在/opt路径下存储,用户为test


    首先,创建一个新的服务单元文件:


    sudo nano /etc/systemd/system/a-out.service

    然后,将以下内容粘贴到文件中:

    ini
    [Unit]  
    Description=Custom Service for a.out  
    After=network.target  
     
    [Service]  
    Type=simple  
    ExecStart=/opt/a.out  
    Restart=on-failure  
    RestartSec=5  
    User=test  
    Group=test  
     
    [Install]  
    WantedBy=multi-user.target

    这里的关键点解释:

        Type=simple 表示这个服务将立即启动并等待 ExecStart 命令完成。
        ExecStart=/opt/a.out 指定了要运行的程序。
        Restart=on-failure 表示当服务进程异常退出时(返回值非零)重启它。如果你想在程序正常退出(返回值零)时也重启,可以使用 Restart=always。
        RestartSec=5 表示在重启服务之前等待5秒。
        User=test 和 Group=test 指定了运行服务的用户和组。

    保存并关闭文件后,重新加载 systemd 配置:


    sudo systemctl daemon-reload

    接下来,启用这个服务,以便在系统启动时自动运行:


    sudo systemctl enable a-out.service

    最后,启动服务:


    sudo systemctl start a-out.service

    现在,a.out 应该在开机时自动启动,并且如果它退出,systemd 会在5秒后尝试重新启动它。请注意,Restart=on-failure 只有在进程非零退出时才会重启,如果你希望无论何种情况都重启,请更改为 Restart=always。

    确保 /opt/a.out 是一个可执行文件,并且 test 用户有权限执行它。如果需要,你可能需要调整文件权限或所有权:


    sudo chown test:test /opt/a.out  
    sudo chmod +x /opt/a.out

    此外,请检查 a.out 是否设计为在后台运行或是否使用了任何守护进程模式,因为 systemd 通常期望服务在后台运行。如果 a.out 是一个交互式程序,你可能需要对其进行修改或包装,以便它可以作为服务运行。

  • 相关阅读:
    Azure Data Factory(八)数据集验证之服务主体(Service Principal)
    Postgres时间字段设置默认值
    08 nginx 的一次请求处理调试
    扎实打牢数据结构算法根基,从此不怕算法面试系列之week01 02-09 测试算法时间复杂度性能的方式方法
    英语进阶指南:高效学习方法,提升英语水平 | 开源专题 No.35
    (九)集合 - List
    前端工程化小记
    《发现的乐趣》作者费曼(读书笔记)
    PX4 固件常用 QGroundControl 参数设置
    八、Spring Boot - 国际化、登录功能实现 (4)
  • 原文地址:https://blog.csdn.net/farsight_2098/article/details/138167609