当前位置: 首页 > news >正文

几种linux开机自启脚本的方法

几种linux开机自启脚本的方法

    • 1. 脚本添加到init.d目录中
    • 2. 创建服务service(推荐)
    • 3. /etc/profile & /etc/profile.d(不推荐)
    • 4. /etc/rc.local

本文以启动jenkins节点为例,需要持久连接,实现开机自启

1. 脚本添加到init.d目录中

runlevel 3为例

流程:
1. 编写脚本,并赋权为可执行

root@ubuntu1:/etc/init.d# cat jenkins_agent.sh
#!/bin/bash
nohup /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir "/usr/share/jenkins" &>/dev/null &
root@ubuntu1:/etc/init.d# chmod a+x jenkins_agent.sh

这里还是需要注意下,首行#!/bin/bash指定shell运行是必须要写的,否则会报错Failed at step EXEC spawning /etc/init.d/jenkins_agent.sh: Exec format error。另外脚本中出现的文件都需要使用绝对路径。

  1. 创建链接

关于rc*.d下软链接的命名:
此类链接文件一般以K或S开头,其中K表示停止(Kill)一个服务,会向脚本传递stop参数;S表示启动(Start)一个服务,会向脚本传递start参数;所以他们可以指向同一个脚本文件,只是传递不同的参数,以产生不同执行结果。
S\K后面会跟数字,表示脚本的执行顺序,数字越小执行顺序越靠前。

如果希望在runlevel 3启动时,启动脚本,则需要

	ln -s /etc/init.d/jenkins_agent.sh /etc/rc3.d/S95jenkins_agent

如果是runlevel 5启动

ln -s /etc/init.d/jenkins_agent.sh /etc/rc5.d/S95jenkins_agent

这里也可以通过update-rc.d来创建链接,不过这里不推荐了,原因有三:
① 并非centos系统默认程序,ubuntu默认自带
② 脚本需要遵守init.d中启动脚本编写规范,有一定学习成本
③ 在某些版本设置完成后,启动顺序有所变化

当完成后,可以看到脚本已正常运行,并且在日志中也有所体现

root@ubuntu1:/etc/init.d# journalctl -xe|grep jenkins
Jun 27 23:00:35 ubuntu1 systemd[1]: Starting jenkins_agent.service...
-- Subject: Unit jenkins_agent.service has begun start-up
-- Unit jenkins_agent.service has begun starting up.
Jun 27 23:00:35 ubuntu1 systemd[1]: Started jenkins_agent.service.
-- Subject: Unit jenkins_agent.service has finished start-up
-- Unit jenkins_agent.service has finished starting up.

总的来说,这种方式简单粗暴

2. 创建服务service(推荐)

把脚本创建为服务,通过systemd管理

这里我们把前面创建的脚本链接删除

root@ubuntu1:/etc/init.d# mv /etc/rc3.d/S95jenkins_agent /dev/null
root@ubuntu1:/etc/init.d# mv /etc/rc5.d/S95jenkins_agent /dev/null
root@ubuntu1:/etc/init.d# ps -ef|grep java|grep -v 'grep'

一般service都存放于/lib/system/system目录下,以xxx.service命名,且内部采用统一的格式:

[Unit]
Description=xxxxxxxxxxxxxxxx         #描述服务 
After=network.target                 #用于指定服务启动的前置条件
Documentation=                       #帮助文件的地址,可缺省[Service]
#Type= 启动时进程行为,比如设为:simple
#EnvironmentFile= 指定环境变量,不指定可以设为no
#User=  启动用户
#Group=  启动用户组
ExecStart=  /usr/bin/test            #服务启动命令,此项必填
ExecStop=   /usr/bin/test            #服务终止命令,可缺省
#Restart= 指定重启条件,比如设为:on-failure
#RestartSec= 自动重启当前服务的间隔秒数,比如设为:1s[Install]                            #用来定义如何启动,以及是否开机启动。
WantedBy=multi-user.target           #当服务开机启动后,会放入什么文件夹,影响启动顺序

修改后的service文件

Unit]
Description=jenkins agent start
After=network.target
Documentation=[Service]
ExecStart= /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir "/usr/share/jenkins"
[Install]
WantedBy=multi-user.target

这样我们就可以通过systemd进行管理该脚本

root@ubuntu1:/lib/systemd/system# systemctl enable jenkins-agent.service
Created symlink from /etc/systemd/system/multi-user.target.wants/jenkins-agent.service to /lib/systemd/system/jenkins-agent.service.
root@ubuntu1:/lib/systemd/system# systemctl start jenkins-agent.service
root@ubuntu1:/lib/systemd/system# systemctl status jenkins-agent.service
● jenkins-agent.service - jenkins agent startLoaded: loaded (/lib/systemd/system/jenkins-agent.service; disabled; vendor preset: enabled)Active: active (running) since Fri 2024-06-28 00:29:14 PDT; 2s agoMain PID: 19035 (java)CGroup: /system.slice/jenkins-agent.service└─19035 /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0
...
root@ubuntu1:/lib/systemd/system# systemctl stop jenkins-agent.service
root@ubuntu1:/lib/systemd/system# systemctl status jenkins-agent.service
● jenkins-agent.service - jenkins agent startLoaded: loaded (/lib/systemd/system/jenkins-agent.service; disabled; vendor preset: enabled)Active: failed (Result: exit-code) since Fri 2024-06-28 00:32:35 PDT; 2s agoProcess: 19183 ExecStart=/usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8ccMain PID: 19183 (code=exited, status=143)
...

这种方法比较推荐,关于systemd管理文件如何编写,可以参考 https://blog.csdn.net/u010230019/article/details/132336029

3. /etc/profile & /etc/profile.d(不推荐)

不建议把启动脚本写在/etc/profile/etc/profile.d中,虽然可以这么做,原因:
/etc/profile & /etc/profile.d中的脚本或命令,每次用户登录都会加载执行,所以如果某些提供服务的脚本放在此处,每次用户登录都会执行该脚本或命令

cp /etc/init.d/jenkins_agent.sh /etc/profile.d/
root@ubuntu1:~# exit
logout
yurq@ubuntu1:~$ sudo -i
root@ubuntu1:~# ps -ef|grep java
root       2105      1  2 01:02 pts/0    00:00:09 /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir /usr/share/jenkins
root       5149   5071  0 01:10 pts/0    00:00:00 grep --color=auto java
[1]+  Exit 255                nohup /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir "/usr/share/jenkins" &> /dev/null

/etc/profile & /etc/profile.d主要还是用来设置环境变量,以及一些用户的特殊设置。对于不需要以服务形式提供的脚本,实际也是可以放到此处的。

具体来说,/etc/profile文件的作用包括:

  • 设置系统范围的环境变量:可以在该文件中定义系统级别的环境变量,这些环境变量会被所有用户的shell会话继承。
  • 执行全局的shell脚本:可以在该文件中执行一些需要在系统启动时执行的脚本,比如初始化系统环境、加载特定的模块等操作。
  • 配置全局的shell选项:可以在该文件中设置系统范围内的shell选项,比如设置命令提示符、历史记录、自动补全等。

总的来说,/etc/profile文件是用来配置系统范围的shell环境和行为的,可以对系统的整体行为进行一些设置和调整。

4. /etc/rc.local

在最新的linux发行版中,/etc/rc.local文件默认已经不存在了,如果需要可能要手动创建

可以在/etc/rc.local中加入执行的脚本,例如

yurq@ubuntu1:~$ tail /etc/rc.local
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.#!/bin/bash
nohup /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir "/usr/share/jenkins" &>/dev/null &

虽然ubuntu中没有提示加执行权限,但在centos中有提到,不过说明的位置和文件实际位置略有差异。

[root@node-254 ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

所以,如果能让脚本开机自启,还需要加执行权限

chmod +x /etc/rc.local

重启后,仍可以达到效果

yurq@ubuntu1:~$ ps -ef|grep java
root        795      1 61 01:21 ?        00:00:07 /usr/bin/java -jar /usr/local/share/agent.jar -jnlpUrl http://192.168.5.54:8080/computer/70%2E140/jenkins-agent.jnlp -secret 67d842f7fc00f1627a1e9cf5a3901689dae8522a6fe8cc658bd0a0c73023fafb -workDir /usr/share/jenkins
yurq        968    915  0 01:21 pts/0    00:00:00 grep --color=auto java

对于这种方式,笔者谈不上推荐或不推荐,因为在最新的linux发行版中,该文件已经默认不存在了,所以有很大概率在未来的某个版本开始,将彻底移除这个功能。如果不看那么长远,现在使用倒是也还可以。

相关文章:

几种linux开机自启脚本的方法

几种linux开机自启脚本的方法 1. 脚本添加到init.d目录中2. 创建服务service(推荐)3. /etc/profile & /etc/profile.d(不推荐)4. /etc/rc.local 本文以启动jenkins节点为例,需要持久连接,实现开机自启 …...

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140059315 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…...

Firewalld 防火墙基础

Firewalld 防火墙基础 一、Firewalld概述firewalld 简介firewalld 和 iptables 的关系firewalld 与 iptables service 的区别 二、Firewalld 网络区域区域介绍Firewalld数据处理流程 三、Firewalld 防火墙的配置方法firewall-config 图形工具“区域”选项卡“服务”选项卡改变防…...

针对 Windows 10 的功能更新,版本 22H2 - 错误 0xc1900204

最近想帮女朋友生win11发现她电脑安装更新总是卡到安装%10这里失败 原来是安装路径被修改过了,改回c盘 win R → 输入regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion...

goframe框架规范限制(but it should be named with “Res“ suffix like “XxxRes“)

背景: 首页公司最近要启动一个项目,公司主要业务是用java开发的,但是目前这个方向的项目,公司要求部署在主机上,就是普通的一台电脑上,电脑配置不详,还有经常开关机,所以用java面临…...

格式化选NTFS还是exFAT 格式化NTFS后Mac不能用怎么办 移动硬盘格式化ntfs和exfat的区别

面对硬盘、U盘或移动硬盘的格式化决策,NTFS与exFAT作为主流的文件系统,用户在选择时可以根据它们的不同特点来选择适用场景。下面我们来看看格式化选NTFS还是exFAT,格式化NTFS后Mac不能用怎么办的相关内容。 一、格式化选NTFS还是exFAT 在数…...

中国桥梁空间分布数据

2020年中国桥梁空间分布数据,共包含102000余条数据。 数据属性表包括:地级市名、区县名、桥梁名称和经纬度。有shp和EXCEl两种格式数据。目前暂没有广西、广东和台湾三个省份数据。...

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪,但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落,而段落又由许多句子组成。 啊。 即使在极少数情况下,我读完了一章,下一页上已经有另一章等着…...

经典的卷积神经网络模型 - ResNet

经典的卷积神经网络模型 - ResNet flyfish 2015年,何恺明(Kaiming He)等人在论文《Deep Residual Learning for Image Recognition》中提出了ResNet(Residual Network,残差网络)。在当时,随着…...

【Git 学习笔记】1.3 Git 的三个阶段

1.3 Git 的三个阶段 由于远程代码库后续存在新的提交,因此实操过程中的结果与书中并不完全一致。根据书中 HEAD 指向的 SHA-1:34acc370b4d6ae53f051255680feaefaf7f7850d,可通过以下命令切换到对应版本,并新建一个 newdemo 分支来…...

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN(Software Defined Network)即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离,从而实现了网络控制平面的集中控制,为…...

黑马头条-数据管理平台

目录 项目准备 验证码登录 验证码登录-流程 token 的介绍 个人信息设置和 axios 请求拦截器 axios 响应拦截器和身份验证失败 优化-axios 响应结果 发布文章-富文本编辑器 项目准备 技术: • 基于 Bootstrap 搭建网站标签和样式 • 集成 wangEditor 插件…...

API Object设计模式

API测试面临的问题 API测试由于编写简单,以及较高的稳定性,许多公司都以不同工具和框架维护API自动化测试。我们基于seldom框架也积累了几千条自动化用例。 •简单的用例 import seldomclass TestRequest(seldom.TestCase):def test_post_method(self…...

Python 爬虫:多进程,多线程爬虫<提高爬取效率>

关于多进程,多线程的知识,请自行查询资料补充 ~~~~~~~~~~~ 使用多进程: 在python中,使用多进程需要先导包: from threding import Threaddef work(name):for i in range(1000):print(f"我是线程:{n…...

什么是上拉电阻器?上拉和下拉电阻的典型应用

什么是上拉电阻器? 上拉电阻是逻辑电路中使用的电阻,用于确保引脚在所有条件下具有明确定义的逻辑电平。提醒一下,数字逻辑电路有三种逻辑状态:高、低和浮动(或高阻抗)。当引脚未被拉至高或低逻辑电平&…...

centos7安装python3.10

文章目录 1. 安装依赖项2. 下载Python 3.10源码3. 解压源码并进入目录4. 配置安装选项5. 编译并安装Python6. 验证安装7.创建软连接8. 安装pip39. 换源 1. 安装依赖项 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel…...

QT事件处理及实例(鼠标事件、键盘事件、事件过滤)

这篇文章通过鼠标事件、键盘事件和事件过滤的三个实例介绍事件处理的实现。 鼠标事件及实例 鼠标事件包括鼠标的移动、按下、松开、单击和双击等。 创建一个MouseEvent项目,通过项目介绍如何获得和处理鼠标事件。程序效果如下图所示。 界面布局代码如下&#xff…...

职场新人必备待办工具 高效待办工作更省心

作为一名初入职场的菜鸟,我曾被繁琐的工作任务压得喘不过气。每天,邮件、会议、项目任务像潮水般涌来,我常常感到力不从心,生怕遗漏了什么重要事项。那种焦虑,就像站在人来人往的地铁站,却不知道自己该搭乘…...

【创作纪念日】我的CSDN1024创作纪念

机缘 注册CSDN是很长时间了,但是上学时因为专业是电气工程,与编程打交道比较少,一直都是寻求帮助,而非内容输出。直到考研后专业改变,成为了主要跟软件编程、计算机知识相关的研究后,才逐步开启自己的CSDN…...

在AvaotaA1全志T527开发板上使用 UART 连接开发板

连接开发板 AvaotaA1提供两种连接串口输出方式,因为AvaotaA1需要DC 12V/2A/5.5-2.1电源适配器才可以启动系统,请先确保电源已接通。 方式一: 使用配套的 TyepC-SUB 转接板 40Gbps雷电线标准TypeC数据线,就可以同步实现 USB 串口…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...