Linux定时运行sh脚本,如果sh文件已经在运行,则忽略本次运行

需求来源

我需要linux的crontab定期每10分钟运行lan.sh脚本。但由于lan.sh运行需要较长时间,有时超过10分钟。这样会导致系统多次运行lan.sh脚本,引发运行堆积,导致一些非必要的错误。

解决方法

解决方法是写一个脚本,如果lan.sh已经在运行的话,则忽略本次运行,并把执行记录写入日志。

脚本如下(亲测)run_lan.sh:

#!/bin/bash

# 检查lan.sh是否已在运行中
if pgrep -f lan.sh >> /log/lan.log; then
    echo $(date +"%Y-%m-%d %H:%M:%S")"*****: lan.sh is already running, skipping this execution." >> /log/lan.log
else
    echo $(date +"%Y-%m-%d %H:%M:%S")"*****: Running /app/lan.sh..." >> /log/lan.log
    # 运行lan.sh脚本
    /app/lan.sh
    echo $(date +"%Y-%m-%d %H:%M:%S")"*****: lan.sh run finish" >> /log/lan.log
fi

定时任务改动

crontab -e (注意:不通账号有自己的crontab, 需要在对应的账号中设置crontab。一般默认编辑后自动生效)

*/10 * * * * /app/run_lan.sh > /dev/null 2>&1

***********************************************************************************************
author:蓝何忠
email:[email protected]
***********************************************************************************************

你可能感兴趣的:(Linux,定时运行脚本,sh已经运行则忽略,已运行则忽略,lanhezhong,蓝何忠)