用“$$”和$0防止同一个脚本启动多次

在编写shell脚本通过crontab定时任务启动时,如果shell脚本执行时间超过了,crontab拉起脚本的时间间隔,这个时候可能就会出现同一个脚本同时启动多次的现象。这个时候可能会导致采集的数据有重复,计算不准确等等问题,在这种有明显先和顺序要求的时候,就会出问题。

需要采取一定手段,防止这种现象。刚好可以用“$$”和"$0",来实现这个需求,实现只有等当前脚本执行完成之后,才能启动第二次执行。好了,废话不多说,直接贴一个demo,,只要稍加改动,就可以套用到自己的程序里面。同样稍加变通,就可以实现守护进程的效果。

$0 当前程序名$n 当前程序的参数(从1开始,空格分隔)$* 当前程序的所有参数$# 当前程序的参数个数$$ 当前程序的PID(脚本运行的当前进程ID号)$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

第一次执行

#sh ponlyone.sh &[1] 30538# pid=30538 pname=ponlyone.sh expid=30452$$==30538$0==ponlyone.sh$?==0$#==1$1==111$2==$\!!==

第二次执行

#sh ponlyone.sh &[2] 30570# pid=30570 pname=ponlyone.sh expid=30538The process ponlyone.sh is already exists ! pid:30538[2]+ Donesh ponlyone.sh

#!/bin/shsource /etc/profilepid=`echo $$`pname=`echo $0`mypidfile=~/pid.testecho -e "\n pid=$pid pname=$pname \n"function dodo(){echo "\$\$=="$$echo "\$0=="$0echo "\$?=="$?echo "\$#=="$#echo "\$1=="$1echo "\$2=="$2echo "\$\!!=="$!sleep 100}if test -f "$mypidfile"thenexpid=`cat $mypidfile`echo "expid=$expid"pfalg=`ps -ef|grep "$expid"|grep "$pname"|wc -l`if [ "1" = "$pfalg" ]thenecho "The process $pname is already exists ! pid:$expid"elseecho $pid > $mypidfiledodo 111fielseecho $pid > $mypidfiledodo 100fi

版权声明:声明:本文档可以转载,须署名原作者。 作者:无为 qq:490073687

快乐要懂得分享,才能加倍的快乐

用“$$”和$0防止同一个脚本启动多次

相关文章:

你感兴趣的文章:

标签云: