shell脚本实例

背景

centos7环境

1、获取进程pid,并且kill掉

#! /bin/bash
searchName=XXX
pids=$(ps -ef | grep ${searchName} |grep -v grep |awk '{print $2}')for pid in ${pids}
doecho "kill pid" $pidkill -9 $pid
doneecho "finished ..."#################################################
注意: grep -v grep的作用是过滤掉grep的进程,防止误删和报错

2、nginx日志切割脚本

需求:nginx的日志无限增长,导致了磁盘空间紧张

解决方案:shell脚本定时处理。

采用centos7 定时任务定时执行脚本对日志进行处理,保存近7天的日志

(1)shell脚本

#!/bin/bash# 日志存储路径
log_path=/data/tomcats/platform-nginx/logs
# 取出昨天的时间
log_date=$(date -d yesterday +%Y-%m-%d)
# 将访问日志重命名,标志位昨天的日期
cp ${log_path}/access.log  ${log_path}/access_${log_date}.log
# 清空原来的日志文件
cat /dev/null > ${log_path}/access.log
# 将错误日志重命名,标志为昨天的日期
cp ${log_path}/error.log  ${log_path}/error_${log_date}.log
cat /dev/null > ${log_path}/error.log
# 只保留最近7天的日志文件,减少硬盘压力
find ${log_path} -type f -name "*.log" -ctime +7 -exec rm -f {} \;

另外的写法

cur_date=$(date +"%Y%m%d")
cd /opt/nginx/logszip -r ./$cur_date.zip ./*.logfor i in `find . -name '*.log'`; do cat /dev/null > $i; done# Keep 30 backup files
find . -name '*.zip' -mtime +30 -exec rm -f {} \;

(2)脚本赋权限

chmod +x 你编写的脚本

(3)编辑系统定时任务文件

vim /etc/crontab## 编辑添加以下内容,dev表示用户
0 0 * * * dev /data/tomcats/platform-nginx-logjob/nginx_logs.sh  # 每天00:00定时执行任务

(4)重启定时任务服务

systemctl restart crond.service

3、boot启动、停止、状态脚本

#!/bin/sh## 此处可以直接指定路径,如:CURRENT_PATH = /data/tomcats/platform-web-8081/
CURRENT_PATH=`dirname $(readlink -f $0)`#输入参数
IMPUT_CODE=$1
start ()
{echo "$CURRENT_PATH starting ............"#启动脚本#check file exist
#if [ -f "$CURRENT_PATH/jars/$JAR_NAME" ];then
if [ "`ls -A $CURRENT_PATH'/jars/'`" != ""  ];thenecho 'have files'rm $CURRENT_PATH/*.jarmv $CURRENT_PATH/jars/*.jar $CURRENT_PATH/
fi
rm -rf $CURRENT_PATH/logs/*
BUILD_ID=dontKillMe nohup /usr/local/java/bin/java -jar $CURRENT_PATH/*.jar >/dev/null 2>&1 &  ## /dev/null 将日志输入到黑洞,如果需要输入到文件,可以写:$CURRENT_PATH/out.log
}
stop ()
{PID=$(ps -ef|grep java |grep "$CURRENT_PATH" |grep -v grep  |awk '{print $2}')if [ -n "$PID" ];then#关闭脚本echo "kill pid=$PID"kill -9 $PIDfi
}
status()
{#查看是否运行中PID=$(ps -ef|grep java |grep "$CURRENT_PATH" |grep -v grep  |awk '{print $2}')if [ -n "$PID" ];thenecho "$CURRENT_PATH pid=$PID is running...."elseecho "$CURRENT_PATH is stop...."fi}log()
{tail -f $CURRENT_PATH/out.log
}#默认重启服务
if [[ -z "$1" ]];thenIMPUT_CODE=restart
ficase "$IMPUT_CODE" instart)start;;stop)stop;;log)#restartlog;;restart)stopstart;;status)status;;*)
echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
exit 1
;;
esac
exit 0

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

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

相关文章

20240321, 字符串操作,STRING.H,字符串函数的实现

啥意思,这个循环是?每次给P分配一个字节,然后把那个位置写入0?但是0是整数吧?他需要四个字节???这和0地址有什么关系……啊啊啊啊啊 一,字符串操作 1.0 字符数组 补 0…

【C语言基础篇】字符串处理函数(五)strncpy strncat strncamp的介绍及模拟实现

个人主页: 倔强的石头的博客 系列专栏 :C语言指南 C语言刷题系列 后续补充完善

C# 读取指定文件夹

string[] fileNames Directory.GetFiles("D:\demo"); //获取整个demo的文件不包含文件夹 DirectoryInfo dirInfo new DirectoryInfo("D:\demo"); FileInfo[] fils dirInfo.GetFiles(); //获取整个demo的 文件 不包含文件夹 DirectoryInf…

【Golang星辰图】Go语言魔法使者:解锁消息队列魅力,轻松构建强大应用

极速通信:Go语言中不可错过的消息队列库全面解析 前言 随着现代应用程序的复杂性不断增加,消息队列成为了构建可靠、高效和可扩展系统的关键组件之一。在Go语言领域,开发人员可以利用各种消息队列库来简化消息传递过程,实现异步…

LeetCode_Java_递归系列(题目+思路+代码)

206.反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]以此类推,直到反转结束返回头结点 class Solution {public ListNode rever…

是德科技N9020A信号分析仪

181/2461/8938产品概述: N9020A MXA信号分析仪通过增加针对新一代技术的信号分析和频谱分析能力,具备了中档分析仪的更高性能。它突破了以往分析仪的极限,支持业界更快的信号和频谱分析,实现了速度与性能的更佳优化。 速度 测试速度超过其它…

动态规划专题之不同路径

LC 62 不同的路径 dp数组以及下标的含义 dp[i][j]:从起点到第i行第j列的方案数为dp[i][j] 递推公式 这么想,当前状态可以由哪些状态得到?由于它只能向下或向右走,所以就只能向下走到第i行第j列或向右走到第i行第j列 所以dp[i][j]dp[i-1][…

linux之shell脚本基础

1.构建基础脚本 1.1 创建shell脚本 1.1.1 第一行需要指定使用的shell # 用作注释行.shell并不会处理脚本中的注释行,但是第一行的注释,会告诉shell使用哪个shell来运行脚本. #!/bin/bash 1.1.2 让shell找到你的脚本 直接运行脚本会提示-bash: a.sh: command not found.因…

jupyter notebook或jupyterlab运行于/切换指定的conda虚拟环境或显示所有环境方法

Jupyter 在一个名为 kernel 的单独进程中运行用户的代码。kernel 可以是不同的 Python 安装在不同的 conda 环境或虚拟环境,甚至可以是不同语言(例如 Julia 或 R)的解释器。 如何使用 conda 环境和 Jupyter 有三种方法: 1. 在 c…

ES同步失败维护步骤(适用于修改了部分主键值导致同步失败)

维护步骤: 登录到ES服务器:192.168.111.141。停止 Canal 和 Canal-Adapter 服务:cd /home/xiangtan/canal/bin ./stop.shcd /home/xiangtan/canal-adapter/bin ./stop.sh确定修改了主键值的表,例如 tbl_sparking,使用…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑,一台笔记本一台台式机,拥有各自拥有鼠标和键盘,但总是需要切换,感觉太麻烦,想找个简单的方式,不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

算法体系-13 第十三 二叉树的基本算法+二叉树的递归套路

一 完全二叉树的判断 1.1 描述 完全二叉树:他每一层都是满的,即使不满也是最后一层不满,最后一层不满也是从左到右变满的;话句话说就是 完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充&#x…

MySQL数据库 - 索引

一. 索引的相关知识 1. 索引的概念 是一个排序的列表,存储着索引值和这个值所对应的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应…

How to install PyAlink on Ubuntu 22.04

How to install PyAlink on Ubuntu 22.04 环境准备准备conda python环境创建项目虚拟环境激活虚拟环境 安装脚本细节 环境准备 准备conda python环境 关于如何安装conda环境,可以参阅我此前整理的如下文章: How to install Miniconda on ubuntu 22.04…

一句话讲清脏读 、丢失修改、不可重复读、幻读

脏读 : 一个事务读取到了另一个事务回滚之前的数据. 丢失修改 : 两个事务同时访问一个数据时,一个事务在修改的时候不能获取到另一个事务先前已经修改过的内容. 不可重复读:一个事务A内在第二次查询的时候,查到了另一个事务B在A事务第一次查询之后修改的数据. 幻读&#xff…

【Godot 3.5控件】用TextureProgress制作血条

说明 本文写自2022年11月13日-14日,内容基于Godot3.5。后续可能会进行向4.2版本的转化。 概述 之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat,好处是它几乎可以算是矢量的,体积小,所有东西都是样式信息&am…

基于Arduino IDE 野火ESP8266模块WIiFi开发

一、函数介绍 头文件 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h>ESP8266WiFi.h库主要用于连接单个WiFi网络。如果需要连接到多个WiFi网络&#xff0c;例如在需要切换不同网络或者备用网络时&#xff0c;可以使用ESP8266WiFiMulti.h头文件&#xff…

mysql的基本知识点-排序和分组

分组&#xff08;GROUP BY&#xff09; GROUP BY 语句用于结合聚合函数&#xff0c;根据一个或多个列对结果集进行分组。例如&#xff0c;假设你有一个包含销售数据的表&#xff0c;并且你想按产品类别计算总销售额。你可以使用 GROUP BY 和 SUM() 函数来实现这一点。 SELECT…

策略模式业务实战

一、策略模式实现任务分发 1.新建策略接口 package com.ehe.elder.strategy;public interface ElderJobOrderStrategy {void notifyMethod(String outTradeNo); }2.新建策略实现类 Slf4j Component public class ElderJobOrderGranter implements ElderJobOrderStrategy {pu…

【Leetcode】top 100 多维动态规划

62 不同路径 一个机器人位于一个 m x n 网格的左上角&#xff0c;机器人每次只能向下或者向右移动一步&#xff0c;机器人试图达到网格的右下角&#xff0c;问总共有多少条不同的路径&#xff1f; 分析&#xff1a;dp[i][j] 代表走到 (i, j) 的路径总和数 递推规律&#xff1a…