我尝试将条件设置为crontab脚本以进行备份,以便在最后一个备份尚未完成或脚本仍在运行时启动另一个备份,以防备份运行慢或类似的东西。为此,我创建了类似的东西,但linux首先创建了进程,而不是执行脚本命令,因此它总是存在"进程正在运行":
ps auxw | grep backup.sh | grep -v grep > /dev/null
if [ $? = 0 ]; then
echo "process is running"
exit 1
else
./backup.sh
fi
答案 0 :(得分:1)
如果代码段来自backup.sh
文件,那么您可以将上述验证放入单独的文件中。然后grep将不会匹配"本身"。
另一种方法是使用其他正在使用的文件。创建正在使用的文件,并且 - 如果文件存在 - 退出1.只需确保在脚本完成后删除正在使用的文件。
#!/usr/bin/env bash
set -o errexit
trap cleanup ERR INT QUIT
cleanup()
{
rm -f "$INUSE"
}
INUSE=/home/abc/inuse/backup.inuse
if [ if -f "$INUSE" ]; then
echo "process is running"
exit 1
else
touch "$INUSE"
fi
# backup starts in here
# end of backup
cleanup