简单的 Shell Singleton 脚本

有的时候, 多线程能提高性能, 但偶尔也可能希望有且只有一个线程在运行, 例如系统维护脚本, 如果前一个脚本还没有完成, 而下一次检查时间到了, 那不小心同一个脚本可能就会被运行多次了.

最近发现 pidof 命令很适合此目的, 下面是样本脚本:

#!/bin/bash

script_name=`basename $0`

if [ "$(pidof -x $script_name|wc -w )" -gt 2 ]; then
  echo 'More than one instance is running. Exiting...'
  exit 1
fi

echo 'Just me alone, get to work...'

for i in 1 2 3 4 5; do
  echo $i
  sleep 1
done
exit 0

这比之前使用一个 lock 文件的就简单多了. 唯一问题是, 脚本文件名必须是唯一的. 🙂

3 Replies to “简单的 Shell Singleton 脚本”

Leave a Reply

Your email address will not be published. Required fields are marked *