linux系统设置开机启动的两种方法systemd及rc.local(手工写sh脚本,手工写service服务)

文章目录

    • 知识点
    • 实验
      • 一、systemd
        • (一)自写一个sh脚本并加入开机启动
        • (二)源码安装的nginx加入开机启动
      • rc.local

知识点

在Linux系统中,有多种方法可以设置开机启动。以下是其中的一些主要方法:

systemd

  • 在较新的Linux发行版中,systemd是默认的初始化和服务管理工具。
  • 可以在/etc/systemd/system/目录中创建一个新的单元文件,用于定义自启动的服务。
  • 单元文件通常包含服务的描述、依赖关系、要执行的命令等。

rc.local

  • 打开/etc/rc.d/rc.local文件,在文件的末尾添加要执行的命令或脚本的全路径。
  • 确保为rc.local文件添加执行权限,可以使用chmod +x /etc/rc.d/rc.local

crontab

  • 编辑crontab文件,并添加一行如@reboot your_command的命令,其中your_command是要在启动时执行的命令。

/etc/init.d/

  • 在/etc/init.d/目录下创建一个新的启动脚本,并为其添加执行权限。
  • 使用update-rc.d命令(在Debian/Ubuntu系统中)或chkconfig命令(在CentOS/RedHat系统中)将脚本链接到适当的运行级别。

实验

这是主要实验前两种方式

一、systemd

(一)自写一个sh脚本并加入开机启动
vim /usr/local/WF/rebootechotime.sh

脚本内容如下:

#!/usr/bin/sh
#/usr/local/WF/rebootechotime.sh
echo "reboot time is:" >> /usr/local/WF/rebootechotime.txt
date >> /usr/local/WF/rebootechotime.txt

脚本每次开机启动一次,并将开机时间记录在rebootechotime.txt文件中
在这里插入图片描述

cd /usr/local/WF
ll

在这里插入图片描述
可以看到当前脚本没有可执行的权限

chmod a+x rebootechotime.sh

在这里插入图片描述
现在有执行权限了,执行一下:

./rebootechotime.sh
cat rebootechotime.txt

在这里插入图片描述
致此,当前脚本可以独立运行了。

接下来,写servie

vim /etc/systemd/system/rebootechotime.service
[Unit]
Description=rebootechotime
After=network.target[Service]
User=root
ExecStart=/usr/local/WF/rebootechotime.sh[Install]
WantedBy=multi-user.target

测试一下服务是否可以正常启动

cat /usr/local/WF/rebootechotime.txt
systemctl daemon-reload
systemctl start rebootechotime
cat /usr/local/WF/rebootechotime.txt

在这里插入图片描述

设置开机启动

systemctl enable rebootechotime

查看服务启动日志

journalctl -u rebootechotime
(二)源码安装的nginx加入开机启动

这里以nginx为例,因为笔者的nginx是源码安装的,使用systemctl是无法管理的

1.前提:

当前启动nginx的方法使用绝对路径和相对路径两种方式:

/usr/local/nginx/sbin/nginx

cd /usr/local/nignx/sbin && ./nginx

2.添加systemd服务

vim /etc/systemd/system/nginx.service

文件内容如下:

[Unit]
Description=nginx service
After=network.target[Service]
User=root
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecStartPre=/bin/sleep 10[Install]
WantedBy=multi-user.target

在这里插入图片描述
解析

  • User=root:这表示服务将以 root 用户的身份运行。虽然 nginx 通常可以作为一个非 root 用户运行,但在这个配置中,它被设置为以 root 用户身份运行。出于安全考虑,通常建议避免以 root 用户身份运行服务,除非有特定的理由。

  • Type=forking:这指定了服务类型。forking 类型表示服务在启动时会立即返回,而实际的进程将在后台运行。systemd 会等待进程退出,并假定子进程是服务的实际主进程。这是传统 Unix 守护进程的标准行为。

  • ExecStart=/usr/local/nginx/sbin/nginx:这定义了服务启动时应该运行的命令。在这个例子中,它指定了 nginx 的主可执行文件的路径。

  • ExecReload=/usr/local/nginx/sbin/nginx -s reload:当服务需要重新加载配置时(例如,当 systemctl reload nginx 被调用时),这个命令将被执行。在这个例子中,它发送了一个 reload 信号给 nginx 主进程,以重新加载配置。

  • ExecStop=/usr/local/nginx/sbin/nginx -s stop:当服务需要停止时(例如,当 systemctl stop nginx 被调用时),这个命令将被执行。在这个例子中,它发送了一个 stop 信号给 nginx 主进程,以优雅地停止服务。

  • ExecStartPre=/bin/sleep 10:这是一个比较少见的指令,它定义了在 ExecStart 之前的命令。在这个例子中,服务启动前会等待 10 秒。这通常不是一个好的做法,因为它会延迟服务的启动时间,除非有特定的理由(例如,等待其他服务启动或某个资源变得可用)。

3.加入开机启动

systemctl enable nginx  

rc.local

首先将前面写的开机启动取消掉

systemctl disable rebootechotime
vim /etc/rc.d/rc.local

在最后面加入

nohup /usr/local/WF/rebootechotime.sh &
exit 0

/usr/local/WF/rebootechotime.sh

在这里插入图片描述

解析:

  • 在 /etc/rc.local 文件中,你可以使用 nohup命令和 &符号将脚本放到后台执行。nohup命令用于运行一个命令,使其在你退出 shell 后继续运行。&符号则用于将命令放到后台执行。
  • 在Linux的shell脚本和初始化文件中,exit 0通常用来表示脚本或程序已成功完成。exit 命令用于结束脚本的执行,并返回一个退出状态码给父进程。退出状态码是一个整数,通常用于向调用者指示脚本的执行结果。exit 0:表示成功(没有错误)exit 1、exit 2 等非零值:表示有错误发生,不同的非零值可能表示不同类型的错误。

现在添加执行权限并重启测试一下:

chmod a+x /usr/local/WF/rebootechotime.sh
reboot

重启完后,查看一下rebootechotime.txt

cat /usr/local/WF/rebootechotime.txt

在这里插入图片描述
多了一条记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381022.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.3-LSTM的改进

文章目录 1改进点1.1多层化1.2 dropout1.2.1具体概念1.2.2应该插入到LSTM模型的哪里 1.3权重共享 2改进之后的LSTMLM的代码实现2.1初始化2.2前向计算2.3反向传播 3相应的学习代码的实现4总结 1改进点 1.1多层化 加深神经网络的层数往往能够学习更复杂的模式;因此这…

5种梯度下降法的公式

5种梯度下降法的公式推演: 1. 梯度下降 (Gradient Descent) 梯度下降法的更新公式为: θ t 1 θ t − η ∇ θ J ( θ ) \theta_{t1} \theta_t - \eta \nabla_\theta J(\theta) θt1​θt​−η∇θ​J(θ) 其中, θ t \theta_t θt​…

Tomcat服务器

1.Tomcat定义以及作用 Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作。(不用程序员自己写代码去解析http协议规则,比如不用考虑响应码的问题,以及响应数据应该如何写),让…

ZK学习笔记

ZK 一.基本概念 Zookeeper是⼀个开源的分布式协调服务,其设计⽬标是将那些复杂的且容易出错的分布式⼀致性服务封装起来,构成⼀个⾼效可靠的原语集,并以⼀些简单的接⼝提供给⽤户使⽤。 zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案&…

在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整 在 PostgreSQL 里如何实现数据的冷…

ip地址是电脑还是网线决定的

在数字化时代的浪潮中,网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时,IP地址无疑是一个核心的概念。然而,关于IP地址的分配和决定因素,很多人可能存在误解。有些人认为IP地址是由电脑决定的,而…

mybatisPlus和mybatis的版本冲突问题、若依换成MP、解决git无法推送、使用若依框架的swagger、以后再遇到团队项目应该怎么做。

20240716 一. mybatisPlus和mybatis的版本冲突问题1. 使用前的准备2. 我遇到了一个很严重的问题。3. 解决问题,好吧也没解决,发现问题!! 二、该死的git!!!!1. 解决无法在idea中使用g…

CBSD bhyve Ubuntu 配置vnc登录管理

CBSD介绍 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案的单一集成工具,用于使用预定义的软件集以最少的配置快速构建和部署计算机虚拟环境。 虽然CBSD没有提供额外的操作系统级功能,但它极大地简化了…

fatal: not a git repository (or any of the parent directories): .git

问题描述: 通过git pull 拉取代码提示: fatal: not a git repository (or any of the parent directories): .git 这个错误信息表明你当前所在的目录不是一个 Git 仓库,或者任何父目录中都没有 .git 目录。 问题解决: 确认当前目…

Windows 、Linux、MacOS 进程管理机制

本心、输入输出、结果 文章目录 Windows 、Linux、MacOS 进程管理机制前言Windows 进程管理机制Linux 进程管理macOS 进程管理内存不够了,几个操作系统如何处理Windows 、Linux、MacOS 进程管理机制 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 …

<数据集>混凝土缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:7353张 标注数量(xml文件个数):7353 标注数量(txt文件个数):7353 标注类别数:6 标注类别名称:[exposed reinforcement, rust stain, Crack, Spalling, Efflorescence…

JavaSE从零开始到精通

1.前置知识 JVM:java virtrual machine, java虚拟机, 专门用于执行java代码的一款软件。可以将class文件,转换为机器认识的机器码,因为我们的计算机只认识010101的二进制语言。JRE:java runtime enviroment, java运行时环境, jav…

CMake生成Debug和Release目标程序时的一些配置

文章介绍 本文章将介绍在Windows和Linux平台,生成可执行程序时,如何设置Debug和Release的一些属性。主要介绍如何设置目标程序的生成路径,以及运行时库的设置和目标程序版本号的设置。 Debug和Release模式 -O,-O1: 这两个命令的效果是一样…

C++学习笔记-C++11中的智能指针

1.智能指针介绍 智能指针是C的特性用法,是一个类似指针功能的类对象,其目的是为了更好的管理动态分配的内存,避免出现内存泄漏、悬空指针等问题。C11的标准库里提供了三种智能指针模板类,分别是std::unique_ptr、std::shared_ptr…

深入解析HNSW:Faiss中的层次化可导航小世界图

层次化可导航小世界(HNSW)图是向量相似性搜索中表现最佳的索引之一。HNSW 技术以其超级快速的搜索速度和出色的召回率,在近似最近邻(ANN)搜索中表现卓越。尽管 HNSW 是近似最近邻搜索中强大且受欢迎的算法,…

Flutter动画详解第二篇之显式动画(Explicit Animations)

目录 前言 一、定义 1.AnimationController 1.常用属性 1. value 2. status 3. duration 2.常用方法 1.forward 2.reverse 3.repeat 4.stop 5. reset 6. animateTo(double target, {Duration? duration, Curve curve Curves.linear}) 7.animateBack(double ta…

大数据之写入Doris数据问题

1. 解决Key columns should be a ordered prefix of the schema. KeyColumns[1] (starts from zero) is xxx, but 背景 create table if not exists XXX ( fathercorp varchar(50), id decimalv3(38,0) ) ENGINEOLAP UNIQUE KEY(id) COMMENT xxxx DISTRIBUTED BY HASH(id) BUC…

C#实现数据采集系统-实现功能介绍

系统介绍 我们这里主要使用C#( .Net 6)来实现一个数据采集系统,从0到1搭建数据采集系统,从系统分析,功能拆解,到一一实现 数据采集 数据采集是企业信息化和数字化转型过程中的关键环节,它涉及到从生产设备、传感器…

数据结构之细说链表

1.1顺序表的问题以及思考 经过上一篇顺序表的学习,我们知道顺序表还是有很多缺点 顺序表的缺点: 1.中间/头部的插入删除,实际复杂度为O(N) 2.增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗 3.扩容一般…

实战打靶集锦-31-monitoring

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 ssh服务4.2 smtp服务4.3 http/https服务 5. 系统提权5.1 枚举系统信息5.2 枚举passwd文件5.3 枚举定时任务5.4 linpeas提权 6. 获取flag 靶机地址:https://download.vulnhub.com/monitoring/Monitoring.o…