使用pid文件限制重复启动进程
下方脚本为判断脚本是否正在运行,如正在运行就退出脚本,如未启动就可以正常使用脚本。
# 判断根据
将脚本运行时的pid号放入一个文件中,如文件存在,再进行则判断文件内容,文件不存在则可以正常运行脚本。
针对文件存在,但防止其他内容写入文件,不与实际内容相符,所以进行内容判断,判断文件内容中的pid号
否存在,不存在说明,内容为恶意写入,可以不予理会,继续执行脚本。存在则说明脚本正在被执行。
# ps 进程id(后续脚本判断命令说明)
[root@docker01 script]# ps 6450
PID TTY STAT TIME COMMAND
6450 ? Ss 0:00 /usr/sbin/sshd -D
[root@docker01 script]# echo $? # pid存在则返回0
0
[root@docker01 script]# ps 111 # pid不存在则返回1
PID TTY STAT TIME COMMAND
[root@docker01 script]# echo $?
1
[root@egon day10]# cat proc.sh
#!/bin/bash
pidfile='/tmp/proc.pid'
if [ -f $pidfile ];then
pid=`cat $pidfile`
ps $pid &>/dev/null
[ $? -eq 0 ] && echo "脚本正在运行..." && exit 1
fi
echo "$$" > $pidfile
echo "脚本正在运行。。。"
sleep 500
echo "脚本运行完毕。。。"
rm -rf $pidfile