Skip to main content
deleted 19 characters in body
Source Link

I am using cksum to check my script is truly running single instance, even I change filename & file path.

Using cksum

Or you can hardcoded cksum inside your script, so you no worry again if you want to change filename or content of your script.

Using hardcoded cksumno worry again if you want to change filename, path, or content of your script.

I am using cksum to check my script is truly running single instance, even I change filename.

Using cksum

Or you can hardcoded cksum inside your script, so you no worry again if you want to change filename or content of your script.

Using hardcoded cksum

I am using cksum to check my script is truly running single instance, even I change filename & file path.

Or you can hardcoded cksum inside your script, so you no worry again if you want to change filename, path, or content of your script.

Source Link

I am using cksum to check my script is truly running single instance, even I change filename.

I am not using trap & lock file, because if my server suddenly down, I need to remove manually lock file after server goes up.

Note: #!/bin/bash in first line is required for grep ps

Using cksum

#!/bin/bash

checkinstance(){
   nprog=0
   mysum=$(cksum $0|awk '{print $1}')
   for i in `ps -ef |grep /bin/bash|awk '{print $2}'`;do 
        proc=$(ls -lha /proc/$i/exe 2> /dev/null|grep bash) 
        if [[ $? -eq 0 ]];then 
           cmd=$(strings /proc/$i/cmdline|grep -v bash)
                if [[ $? -eq 0 ]];then 
                   fsum=$(cksum /proc/$i/cwd/$cmd|awk '{print $1}')
                   if [[ $mysum -eq $fsum ]];then
                        nprog=$(($nprog+1))
                   fi
                fi
        fi
   done

   if [[ $nprog -gt 1 ]];then
        echo $0 is already running.
        exit
   fi
}

checkinstance 

#--- run your script bellow 

echo pass
while true;do sleep 1000;done

Or you can hardcoded cksum inside your script, so you no worry again if you want to change filename or content of your script.

Using hardcoded cksum

#!/bin/bash

mysum=1174212411

checkinstance(){
   nprog=0
   for i in `ps -ef |grep /bin/bash|awk '{print $2}'`;do 
        proc=$(ls -lha /proc/$i/exe 2> /dev/null|grep bash) 
        if [[ $? -eq 0 ]];then 
           cmd=$(strings /proc/$i/cmdline|grep -v bash)
                if [[ $? -eq 0 ]];then 
                   fsum=$(grep mysum /proc/$i/cwd/$cmd|head -1|awk -F= '{print $2}')
                   if [[ $mysum -eq $fsum ]];then
                        nprog=$(($nprog+1))
                   fi
                fi
        fi
   done

   if [[ $nprog -gt 1 ]];then
        echo $0 is already running.
        exit
   fi
}

checkinstance

#--- run your script bellow

echo pass
while true;do sleep 1000;done