需求来源
我需要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:lanhezhong@163.com
***********************************************************************************************