Linux Systemd 配置开机自启

2023-09-21 11:43:39

博文目录


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

配置方式

需要创建一个 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"

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

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

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

启动服务:

systemctl start myapp.service

检查服务状态:

systemctl status myapp.service

如果一切正常,应该看到服务的状态为 绿色 “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
# 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
# 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

参考

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

更多推荐

uni-app tree(树状) 组件

先看效果:组件代码:<template><viewclass="next-tree"><viewclass="next-tree-mask":class="{'show':showTree}"@tap="_cancel"></view><viewclass="next-tree-cnt":class="{'show':

QT-day1

实现华清远见登陆界面#include"mywnd.h"#include<iostream>#include<QDebug>#include<QPushButton>#include<QLineEdit>#include<QLabel>MyWnd::MyWnd(QWidget*parent):QWidget(parent

C#+sqlserver+asp.net婚纱影楼管理系统

一、源码描述这是一款简洁十分美观的ASP.NET+sqlserver源码,界面十分美观,功能也比较全面,比较适合作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦二、功能介绍该源码功能十分的全面,具体介绍如下:婚纱影楼管理系统实现了以下功能1:套系管理,影楼的管理人员可以管理自己所提供的套系信息2:员工管理,影楼

【QT】day4

闹钟头文件:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QDebug>#include<QMouseEvent>//鼠标时间#include<QPaintEvent>//绘制时间#include<QPainter>//画家时间#include<QPix

优秀的golang开源框架

Web框架:Gin:高性能的Web框架,适用于构建RESTfulAPI和Web应用。Echo:快速和灵活的Web框架,适合构建微服务。Beego:全功能的Web框架,包括ORM、模板引擎等。Revel:全栈Web框架,提供了丰富的功能集。数据库ORM:GORM:强大的对象关系映射库,支持多种数据库。XORM:简单而强大

滚雪球学Java(30):多维数组:定义和初始化一次搞定

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!前言在前面的学习中,我们已经了解了Java数组的定义和操作,但是在实际开发中,我们往往需要用到多维数组来存储数据。在本文中,我们将学习如何定义和初始化多维数组。摘要本文将介绍

python+nodejs+php+springboot+vue 导师双选系统

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的导师功能如下。导师管理导师选择信息,管理项目,管理项目提交并对学员提交的项目进行指导。为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的学员功能如下。学员选择导师,查看项目,提交已完成的项目文件,查看导师对项目的指导信息。这部分内容在系统

华为OD机考算法题:分奖金

题目部分题目分奖金难度难题目说明公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得距离*数字差值的奖金。如果遇不到比自己数字大的,就给自己分配随机数数量的奖

第五章:数组

一、一维数组1、一维数组定义方式一维数组定义的三种方式:①数据类型数组名[数组长度];②数据类型数组名[数组长度]={值1,值2...};注意:第二种方式中,如果{}内不足数组长度个数据,剩余数据用0补全③数据类型数组名[]={值1,值2...};总结:①数组名的命名规范与变量名命名规范一致,不要和变量重名;②数组中下

【音视频】ffplay源码解析-FrameQueue队列

帧队列架构位置结构体源码FrameQueue结构体/*这是一个循环队列,windex是指其中的首元素,rindex是指其中的尾部元素.*/typedefstructFrameQueue{Framequeue[FRAME_QUEUE_SIZE];//FRAME_QUEUE_SIZE最大size,数字太大时会占用大量的内存

【多目标跟踪】 TrackFormer 耗时三天 单句翻译!!!

【多目标跟踪】TrackFormer耗时三天单句翻译!!!TrackFormer:Multi-ObjectTrackingwithTransformersAbstractThechallengingtaskofmulti-objecttracking(MOT)re-quiressimultaneousreasoning

热文推荐