• Linux Systemd 配置开机自启


    博文目录


    Systemd

    Systemd 是一个用于启动、管理和监控 Linux 系统的初始化系统。它是许多现代 Linux 发行版中默认的初始化系统,取代了传统的 SysVinit 和 Upstart。

    Systemd 的引入在 Linux 社区引起了一些争议,因为它与传统的初始化系统有很大的差异。然而,它的设计目标和功能使得管理和维护 Linux 系统变得更加高效和便捷。它已经成为许多主流 Linux 发行版的标准选择,并得到了广泛的应用和支持。

    Systemd 的设计目标是提供更快的启动速度、更好的资源管理和更强大的系统监控功能。它引入了一些新的概念和功能,包括以下几个主要方面:

    • 单位(Unit):Systemd 使用单位(Unit)作为系统组件的基本单元。单位可以是服务(service)、套接字(socket)、设备(device)、挂载点(mount)等。每个单位都有一个对应的配置文件,用于描述其行为和依赖关系。
    • 依赖关系管理:Systemd 可以自动解决单位之间的依赖关系。每个单位可以指定其所依赖的其他单位,Systemd 将根据依赖关系自动按需启动或停止单位。
    • 并行启动:Systemd 支持并行启动系统单位,以提高系统的启动速度。它可以通过并行处理单位的依赖关系来最大程度地利用系统资源,加快启动过程。
    • 日志管理:Systemd 引入了 Journal(日志)系统,用于管理和存储系统日志。Journal 提供了结构化的日志记录和高效的日志查询功能,可以方便地检查系统的运行状态和故障排查。
    • 服务管理:Systemd 提供了强大的服务管理功能,可以启动、停止、重启和管理系统服务。它支持服务的自动重启、进程监控和故障恢复等功能,提高了系统的可靠性和可用性。
    • 控制接口:Systemd 提供了命令行工具和控制接口,用于管理和监控系统。通过 systemctl 命令可以查看和控制单位的状态,启动和停止服务,查看系统日志等。

    最直观的体验就是, 通过 Systemd 配置程序开机启动会非常简单且统一, 体验非常好

    操作方式

    # 所有指令都可以省略 后缀 .service, 如 systemctl enable myapp
    # 设置开机自启
    systemctl enable myapp.service
    # 取消开机自启
    systemctl disable myapp.service
    # 启动
    systemctl start myapp
    # 停止
    systemctl stop myapp
    # 重载
    systemctl reload myapp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    配置方式

    需要创建一个 Systemd 服务单元文件,并在其中指定要在启动时运行的命令或程序。

    据说, 通过二进制方式安装的程序才需要手动创建 Systemd 服务单元文件, 如 xxxx.service, 通过 yum 等安装的程序会自带该文件且会自动放到合适的位置, 可以直接执行 systemctl enable xxxx.service 来启用

    创建服务单元文件:在 /etc/systemd/system//usr/lib/systemd/system 目录下创建一个以 .service 为后缀的服务单元文件,例如myapp.service。

    编辑服务单元文件:使用文本编辑器打开刚刚创建的服务单元文件,并将以下内容粘贴到文件中:

    [Unit]
    Description=My App
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    ExecStart=/path/to/your/app
    Restart=always
    User=your_username
    Group=your_groupname
    Environment="PATH=/usr/bin" "ANOTHER_ENV_VAR=some_value"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    根据实际需求进行适当修改:

    Description:服务的描述。
    After:指定服务启动的依赖项。如果应用需要网络连接,请设置为 network.target。
    ExecStart:指定要在启动时运行的命令或程序的完整路径。将/path/to/your/app替换为实际命令或程序的路径。
    Restart:设置服务在出现问题时自动重启。
    User和Group:指定运行服务的用户和组。将your_username和your_groupname替换为实际用户和组名。
    Environment:设置环境变量。可以根据需要添加多个环境变量。
    WantedBy:指定服务所属的运行级别。将 multi-user.target 替换为所需的运行级别。

    保存并关闭文件。

    重新加载Systemd配置:在终端中执行以下命令,以重新加载Systemd配置并启用新创建的服务单元文件:

    systemctl daemon-reload  
    systemctl enable myapp.service
    
    • 1
    • 2

    这将使 Systemd 在启动时自动加载并运行指定的服务。

    启动服务:

    systemctl start myapp.service
    
    • 1

    检查服务状态:

    systemctl status myapp.service
    
    • 1

    如果一切正常,应该看到服务的状态为 绿色 “active”。

    现在,服务已经配置为开机自启。在下一次重启系统后,Systemd 将自动加载并运行该服务。

    配置示例

    # mysql
    # https://dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/secure-deployment-post-install.html
    
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    User=mysql
    Group=mysql
    
    # Have mysqld write its state to the systemd notify socket
    Type=notify
    
    # Disable service start and stop timeout logic of systemd for mysqld service.
    TimeoutSec=0
    
    # Start main service
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS 
    
    # Use this to switch malloc implementation
    EnvironmentFile=-/etc/sysconfig/mysql
    
    # Sets open_files_limit
    LimitNOFILE = 10000
    
    Restart=on-failure
    
    RestartPreventExitStatus=1
    
    # Set environment variable MYSQLD_PARENT_PID. This is required for restart.
    Environment=MYSQLD_PARENT_PID=1
    
    PrivateTmp=false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    # redis
    [Unit]
    Description=Redis Server
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    ExecStart=/usr/local/bin/redis-server /usr/local/bin/redis.conf
    Type=forking
    PrivateTmp=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # tomcat
    [Unit]
    Description=Tomcat 8.5.70
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    ExecStart=/usr/local/bid/apache-tomcat-8.5.70/bin/startup.sh
    Type=forking
    PrivateTmp=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    参考

    官方文档 MySQL 8.0 参考手册 - 在 Linux 安装 MySQL - 使用 Systemd 管理 MySQL - MySQL 8.0 安全部署向导 - 安装后操作 - 使用 Systemd 启动 MySQL Server

  • 相关阅读:
    快速幂:acwing 875. 快速幂
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    数学--逆运算知识点,附推逆函数的一例
    聊聊ThreadLocal(一)
    一.node的http模块;二.同步和异步;三.异步操作的实现:ajax;四.jQuery中对ajax封装;五.Node的Web框架
    Pytorch intermediate(一) CNN
    电商商品的前后台类目设计思路,小本本记下来(提供获取京东淘宝商品类目信息API 免费测试)
    Python合并多Excel文件
    JAVA诚越园区垃圾分类信息科普系统计算机毕业设计Mybatis+系统+数据库+调试部署
    linux下硬盘分区和格式化和挂载以及启动自动挂载
  • 原文地址:https://blog.csdn.net/mrathena/article/details/133128220