如何防止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
如何自动根据职位设置NextCloud用户配额?

1 前言 一个问题,一篇文章,一出故事。 今天更新一个自动根据AD中的职位(title)设置Next …

Bash
如何在远程主机执行函数?

1 前言 一个问题,一篇文章,一出故事。 笔者今天想在远程机器执行本地脚本定义的函数,于是整理当前章 …

Bash
如何实现监视多台服务器的日志?

1 前言 一个问题,一篇文章,一出故事。 今天遇到需要根据PostFix的特定邮箱地址触发一个电话报 …