例如,要求脚本只能顺序访问某个资源,例如磁盘文件等,就可以参考下面的实现。

#!/bin/bash

#

# file locking using bash.

# ver 0.1.6

#

# author : malundao ( malundao@sina.com )

# date   : 2011-08-31

# ref    : http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2005-09/0472.html

#

# note:

#   shflock_cleanhook() is a user defined function to clean up user-specific sth.

#

# /path/to/lock/. note; directory, not a file.

# should be modified

LOCKPATH="/tmp"

cleanup() {

shflock_cleanhook

cd $LOCKPATH

[ -e lock.pid ] || exit

read pid >/dev/null 2>&1

if [ -n "$pid" ]; then

if [ "$pid" == "$$" ]; then

rm -f lock.$pid

rm -f lock.pid

exit

fi

fi

exit

}

#  trap EXIT ?

trap 'cleanup' HUP INT TERM

getlock() {

oldpath=`pwd`

cd $LOCKPATH

while

echo $$ > lock.$$

[ -e lock.pid ]

do

rm lock.$$

read pid >/dev/null 2>&1

if [ -n "$pid" ]; then

if [ -e /proc/$pid ]; then

cd $oldpath

return 1 # Lock is taken by others

else

#unsafe: rm -f lock.$pid

echo WARN: please delete stale lock.pid by HAND.

return 2

fi

else

# sleep some seconds,then back to 'while' loop

# 11 is a prime number, $$ as a random.

echo sleep $(( $$ % 11 ))

sleep $(( $$ % 11 ))

fi

done

# 'ln -s' is an atom op.

ln -s lock.$$ lock.pid >/dev/null 2>&1

if [ $? -eq 0 ]; then

cd $oldpath

return 0 # We got the lock

else

[ -e lock.pid ] || echo WARN: please delete hanging lock.pid by HAND.

cd $oldpath

return 3 # Lock is probably taken by others.

fi

}

putlock () {

oldpath=`pwd`

cd $LOCKPATH && rm -f lock.$$ lock.pid

cd $oldpath

}

## test

shflock_cleanhook() {

echo i\'m a hook.

}

while true; do

while ! getlock; do

#echo wait a second...

sleep 1

done

echo \[$$\] `date` ,now hold lock for 3 seconds...

sleep 3

#echo putlock

putlock

sleep 1 # yield

done

防止脚本多次执行(一)

while [ `ps x |grep -v grep|grep filename.sh|wc -l` -gt 0 ];

do

exit

done

把内容放在脚本最上面

filename.sh 替换为你要监控的脚本名字

还有一种方法是 死循环 可以根据不同的环境,不同的脚本内容,使用的方法也同步,方法很简单日后在写出来

linux 重复执行脚本,防止shell脚本重复执行的代码相关推荐

  1. linux mysql 写shell_Linux—编写shell脚本操作数据库执行sql

    修改数据库数据 在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写. 一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行.本篇文 ...

  2. Linux命令每五分钟执行一次,Linux crontab 每5秒钟执行一次 shell 脚本 的方法

    Linux crontab 每5秒钟执行一次 shell 脚本 的方法 由于 Linux 的 crontab 的定时命令格式如下: minute hour day-of-month month-of- ...

  3. 小豪学Linux——vim文本编辑器与shell脚本

    4.Vim编辑器与Shell命令脚本 4.1.Vim文本编辑器 Vim编辑器的三种模式及切换方法 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等 输入模式:正常文本录入 保存或退出我能当 ...

  4. Linux 之旅 10:Shell 脚本

    Linux 之旅 10:Shell 脚本 (图片来自shell/bash脚本编程) Linux 上的 Shell 脚本可以看做是类似于Windows上的批处理程序(.bat)一样的东西,其本质就是将一 ...

  5. 嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)

    大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程. 目录 前言 一.Shell 脚本基础说明 1.1 什么是 Shell 脚本 1.2 Shell 脚本的 ...

  6. LINUX下的流量监控shell脚本

    这篇文章主要介绍了LINUX下的流量监控shell脚本,可以适用任何Linux版本,需要的朋友可以参考下 一.脚本源码 # vi /etc/rc.d/traffic_monitor.sh ------ ...

  7. 服务器状态监控php源码,服务器状态监控_监控Linux服务器网站状态的SHELL脚本

    摘要 腾兴网为您分享:监控Linux服务器网站状态的SHELL脚本,蜗牛集市,同花顺,探客宝,手柄助手等软件知识,以及日期倒计时插件,云南省教育资源公共,rui手机桌面,小屁孩桌面便签,合金装备崛起复 ...

  8. linux 读取命令行输入参数,shell脚本读取文件+读取命令行参数+读取标准输入+变量赋值+输出到文件...

    读取url_list文件批量下载网页 url_list http://www.tianyancha.com/company/2412078287 http://www.4399.com/special ...

  9. Linux系统一键安全加固shell脚本编写思路

    本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...

  10. linux cc脚本,Linux运维知识之Linux简单处理CC攻击shell脚本

    本文主要向大家介绍了Linux运维知识之Linux简单处理CC攻击shell脚本,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 第一个脚本是通过查找日志中访问次数过多的ip,并 ...

最新文章

  1. javascript网络_没有JavaScript的网络外观
  2. matlab恢复默认界面布局
  3. 史丹利对话中国农民丰收节交易会-万祥军:谋定跨国合作
  4. PHP复习第二天-变量
  5. python控制步进电机代码tx2_步进电机C语言控制,高手请进来指点一下!
  6. Linux上快速搭建Jenkins服务器 实现持续集成开发
  7. datatable中某一列最小值_Asp.net中获取DataTable选择第一行某一列值
  8. PHP笔记-商品价格例子
  9. 2小时c++与ros教学
  10. 解决Ubuntu18.04 No wifi adapter found
  11. sed系列:行或者模式匹配删除特定行
  12. 1 + 2 + 3 + 4 + ⋯
  13. VS2013——error C4996: 'std::_Uninitialized_copy0':
  14. VM Workstation 虚拟机安装Ghost XP教程
  15. 澜舟科技开源轻量级中文语言预训练模型——孟子模型
  16. 拓端tecdat|R语言马尔可夫转换模型研究交通伤亡人数事故预测
  17. spss分析方法-方差分析
  18. quartz mysql 表 集群配置_Quartz集群配置
  19. python爬虫+网页点击事件+selenium模拟浏览器,爬取选股宝内容
  20. android系统架构,文件目录

热门文章

  1. 关于Vmware ESX 4.1添加第二个Servier Console 却无法添加网关的解决方法
  2. 应用C语言编辑画图程序
  3. aix 查看防火墙状态_Linux 7.x 防火墙amp;端口
  4. Java基本数据类型的自动转换_彻底理解Java中的基本数据类型转换(自动、强制、提升)...
  5. 信息学奥赛一本通(1090:含k个3的数)
  6. 爬楼梯(信息学奥赛一本通-T1204)
  7. 一只小蜜蜂(HDU-2044)
  8. 信息学奥赛C++语言:求各位数和2
  9. 信息学奥赛C++语言:判断两位数
  10. 56 MM配置-评估和科目设置-定义评估类