Linux中执行一个Sheel脚本/系统重启后自动执行脚本

news2025/1/21 15:22:03

Linux中执行一个Sheel脚本

一:编写一个重启Java服务的.sh脚本

  1. Windows中创建一个restart.sh文件

  2. 将一下脚本内容copy中restart.sh文件中

    #!/bin/bash
    
    JAR_NAME="cloud.jar"
    LOG_FILE="restart.log"
    
    # 进入目录
    cd /opt/server/cloudRecord/
    
    # 检查进程是否正在运行
    is_process_running() {
        local process_name=$1
        if pgrep -f "$process_name" >/dev/null; then
            return 0 # 进程正在运行
        else
            return 1 # 进程未运行
        fi
    }
    
    # 终止进程
    kill_process() {
        local process_name=$1
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 终止进程 $process_name" >>$LOG_FILE
        pkill -f "$process_name"
        sleep 5s # 等待5秒钟确保进程已经终止
    }
    
    # 重启Jar文件
    restart_jar() {
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 正在重启 $JAR_NAME" >>$LOG_FILE
        java -jar $JAR_NAME >>$LOG_FILE &
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] $JAR_NAME 重启完成" >>$LOG_FILE
    }
    
    # 检查并重启
    if is_process_running $JAR_NAME; then
        kill_process $JAR_NAME
    fi
    
    restart_jar
    
  3. 将脚本上传到Linux中的目录下面

  4. 脚本说明:

    1.在脚本开头使用#!/bin/bash指定解释器为Bash。
    2.确保将该脚本保存为可执行文件,可以通过chmod +x restart.sh命令为脚本添加执行权限。
    要执行这个脚本,在终端中导航到包含脚本的目录,然后运行./restart.sh命令即可。
    
  5. 异常问题:

    直接上传到linux当中执行,报错:-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

    image-20230815180321707

    解决方法:

    image-20230815180705185

    解决方式:
    错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
    
    1.vim test.sh中,
    2.执行set ff  命令,可以看到当前文件的格式类型
    3.强制将dos类型转为unix
    4.执行set ff=unix
    5.wq保存重新执行即可
    
    还有一种方式可以用:dos2unix  test.sh 命令转换编码;
    

二:配置Liunx重启后自动执行某个命令

1、crontab -e命令

crontab -e命令用于编辑当前用户的cron作业。
当你运行crontab -e命令时,会打开一个文本编辑器(通常是vi或nano),用于编辑cron作业的计划任务列表。每个用户都有一个单独的cron表,可以用来设置定期执行的任务。
在编辑器中,你可以按照cron的语法添加、修改或删除作业。每一行代表一个作业,包含了cron时间表达式和要执行的命令。

以下是一个示例的crontab文件:

# 每天凌晨2点执行备份脚本
0 2 * * * /path/to/backup.sh

# 每周日晚上10点清理临时文件
0 22 * * 7 /path/to/cleanup.sh

# 每小时运行自动更新任务
0 * * * * /path/to/update.sh


保存并退出编辑器后,cron作业将根据指定的时间表自动运行。

注意:在编辑crontab文件之前,请确保你具有适当的权限,并且知道如何使用所选的文本编辑器。如果不确定如何编辑cron作业,请参考编辑器的相关文档或使用crontab命令的帮助页(man crontab)。

2、步骤方法:

image-20230815190046434

1.输入:crontab -e
2.将 
  @reboot sleep 60 && sh /opt/server/cloudRecord/start.sh
  加进任务列表中,此命令代表:意味着在服务器重新启动后,等待60秒后执行/opt/server/cloudRecord/start.sh脚本
3.wq保存
4.重启服务器命令:sudo shutdown -r now
5.重启后重新验证服务已经自动重启成功

如果在服务器重启后没有自动启动脚本,请检查以下几个方面:
脚本路径和文件权限:确保/opt/server/cloudRecord/start.sh脚本的路径和文件名正确,并且具有执行权限。你可以使用
ls -l /opt/server/cloudRecord/start.sh命令来检查文件权限。

crontab配置是否正确:使用crontab -e命令打开cron表进行编辑,并确认以下内容是否正确:

@reboot sleep 60 && sh /opt/server/cloudRecord/start.sh
保存并退出编辑器。

系统日志:查看系统日志文件(如/var/log/syslog、/var/log/messages等)以获取与cron作业相关的错误消息。这些日志文件可能包含有关任何错误或警告的线索。

手动测试脚本:尝试手动执行脚本以确定是否存在任何错误。在终端中运行以下命令来测试脚本:

sh /opt/server/cloudRecord/start.sh

如果脚本能够正常运行,但在cron作业中无法正常工作,则可能需要进行其他调试。


检查cron服务状态:确保cron服务正在运行。使用以下命令检查cron服务状态:
service cron status
如果cron服务未启动,请使用以下命令启动它:
service cron start

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索API接口的奥秘:解析与应用

什么是API接口?为什么它如此重要? 在现代技术和互联网时代,API接口是互联网服务之间实现数据传输和交流的关键链接。 API(应用程序编程接口)是一组定义了不同软件组件之间交互的规则和约定。 它允许不同的软件系统之间…

通过Git使用GitHub

目录 一、建立个人仓库 二、配置SSH密钥 三、克隆仓库代码 四、推送代码到个人仓库 五、代码拉取 一、建立个人仓库 1.建立GitHub个人仓库,首先注册GitHub用户。注册好了之后,打开用户的界面 然后就是配置问题 配置好后拉到最下方点击create repos…

day9 STM32 I2C总线通信

I2C总线简介 I2C总线介绍 I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。 它是同步通…

MFA多因素认证和TOTP认证逻辑解析

MFA多因素认证与TOTP认证逻辑解析 在今天的数字时代,隐私和安全变得尤为重要。用户越来越需要确保他们的在线账户和敏感信息不会落入不法分子之手。为此,多因素认证(Multi-Factor Authentication,MFA)应运而生&#x…

Linux系统编程:采用管道的方式实现进程间通信

目录 一. 进程间通信概述 二. 管道的概念 三. 通过管道实现进程间通信 3.1 实现原理 3.2 匿名管道创建系统接口pipe 3.3 管道通信的模拟实现 3.4 管道通信的访问控制规则 3.5 管道通信的特点 四. 通过匿名管道实现进程池 4.1 进程池的概念 4.2 进程池的模拟实现 五…

Android 广播发送流程分析

在上一篇文章中Android 广播阻塞、延迟问题分析方法讲了广播阻塞的分析方法,但是分析完这个问题,自己还是有一些疑问: 广播为啥会阻塞呢?发送给接收器就行了,为啥还要等着接收器处理完才处理下一个?由普通…

分布式文件系统(FastDFS)

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

吐血整理,接口自动化测试-接口依赖/上传接口处理(项目实例)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 常见的两种接口依…

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

什么是前端框架?怎么学习? - 易智编译EaseEditing

前端框架是一种用于开发Web应用程序界面的工具集合,它提供了一系列预定义的代码和结构,以简化开发过程并提高效率。 前端框架通常包括HTML、CSS和JavaScript的库和工具,用于构建交互式、动态和响应式的用户界面。 学习前端框架可以让您更高效…

Centos8安装docker并配置Kali Linux图形化界面

鉴于目前网上没有完整的好用的docker安装kali桌面连接的教程,所以我想做一个。 准备工作 麻了,这服务器供应商提供的镜像是真的纯净,纯净到啥都没有。 问题一:Centos8源有问题 Error: Failed to download metadata for repo ap…

Redis基础概念和数据类型详解

目录 1.什么是Redis? 2.为什么要使用Redis? 3.Redis为什么这么快? 4.Redis的使用场景有哪些? 5.Redis的基本数据类型 5.1 5种基础数据类型 5.1.1 String字符串 5.1.2 List列表 5.1.3 Set集合 5.1.4 Hash散列 5.1.5 Zset有序集…

【hive】hive分桶表的学习

hive分桶表的学习 前言: 每一个表或者分区,hive都可以进一步组织成桶,桶是更细粒度的数据划分,他本质不会改变表或分区的目录组织方式,他会改变数据在文件中的分布方式。 分桶规则: 对分桶字段值进行哈…

玩转 VS code 之下载篇

VSCode 简介 Visual Studio Code (简称 VS Code / VSC),是2015 年由微软公司推出的一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、GIT 等特性,支持插件扩展等等 可用于 Windows,ma…

使用 Visual Studio GoogleTest编写 C/C++ 单元测试——入门篇

入门教程 Visual Studio 新建 GoogleTest项目,一路选默认参数 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

LoRA微调方法详解

本文要介绍的是大模型的微调训练方法之一----LoRA。 0 背景 现在大模型非常火爆,大家都在想方设法应用大模型。 当前很多大模型虽说可以zero-shot直接使用, 但是在具体应用上一般还是微调一下效果更好, 也就是常说的finetune。 在小模型时代…

栈存储结构详解

目录 栈存储结构详解 进栈和出栈 栈的具体实现 栈的应用 什么是队列(队列存储结构) 栈存储结构详解 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示。 图 1 栈存储结构示意…

【string】基本用法

目录 前言: string常用接口 一、string的创建,拼接与拷贝构造 1.创建 2.拼接 3.拷贝构造 二、string遍历 方式一:operator[ ]重载 方式二:迭代器 1.正向迭代器: 2.反向迭代器 3.const正向迭代器 4.const反向迭代器 方式三&#…

PyQt5资源的加载和使用,即如何使用Pyrcc

1、打开QtDesigner,选择编辑资源 2、新建资源文件,随便找个地方保存 3、按照自己的喜好命名,然后添加资源 4、保存并退出 5、我们创建一个QLabel,在这里添加资源 6、我们保存界面文件,并编译为py文件,然后…

【C语言】调试技巧

目录 一、什么是bug? 二、调试 1.一般调试的步骤 2.Debug 和 Release 三、调试环境准备 四、调试时要查看的信息 1.查看临时变量的值 2.查看内存信息 3.查看调用堆栈 4.查看反汇编信息 5.查看寄存器 五、练习 六、常见的coding技巧 七、const的作用 八、编程常见…