如何防止Base Shell脚本重复执行?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者最近发现脚本因为重复执行而损耗服务器性能,因此解决此问题而整理本章节。

2 最佳实践

2.1 创建测试脚本

vim ~/scripts/script.sh

加入如下配置,

#!/bin/bash

LOCKFILE="/tmp/script.lock"

# 检查锁文件是否存在
if [ -e "$LOCKFILE" ]; then
    oldPid=$(cat "$LOCKFILE")

    # 检查 PID 是否为空
    if [ ! -z "$oldPid" ]; then
        # 检查进程是否仍在运行
        if ps -p "$oldPid" > /dev/null; then
            echo "Script is already running with PID $oldPid."
            exit 1
        fi
    fi
    rm -f "$LOCKFILE"
fi

# 创建锁文件并写入当前进程的 PID
echo $$ > "$LOCKFILE"

# 执行主要任务
echo "Running the script..."
# 示例命令
sleep 30  # 模拟长时间运行的任务

# 清理锁文件
rm -f "$LOCKFILE"
exit 0

2.2 执行测试脚本

bash ~/scripts/script.sh
没有评论

发表回复

Bash
如何Telnet自动登录路由器执行命令?

1 前言 一个问题,一篇文章,一出故事。 最近在笔者需要一个脚本自动从路由读取一些信息,因此整理本章 …

Bash
如何实现Base Shell的数值百分比计算?

1 前言 一个问题,一篇文章,一出故事。 最近笔者需要通过Base Shell实现一个计算Quota …

Bash
如何自动重启提示Too many open files的服务?

1 前言 一个问题,一篇文章,一出故事。 笔者最近有个程序遇到“java: java.io.IOEx …