我试图为crontab脚本设置一个条件,如果最后一个备份尚未完成或脚本仍在运行,则不启动另一个备份,以防备份运行速度较慢或类似的情况。为此,我创建了类似的东西,但linux首先创建进程,然后执行脚本命令,因此它将始终存在"process is running":
ps auxw | grep backup.sh | grep -v grep > /dev/null
if [ $? = 0 ]; then
echo "process is running"
exit 1
else
./backup.sh
fi
如果代码片段来自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