gpt4 book ai didi

linux - 如何使用 bash 锁定文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:48 26 4
gpt4 key购买 nike

我有一个任务要从远程服务器同步一个目录

rsync -av root@s0.foo.com:/srv/data/ /srv/data/ 

为了使其定期运行并避免脚本“reEnter”问题,我使用 rsync progress 的 pid 创建了一个文件锁“in_progress”,它指示程序是否仍在运行。

lock(){
echo $1 > in_progress
}

利用该函数判断rsync进度是否还在运行:

is_running(){
pid=$(cat in_progress)
return ps aux | awk '{print $2}' | grep $pid
}

我可以用这个获取 pid 传递给函数 lock

$!

我不得不把rsync进度背景放在rsync的pid上,所以我得到了这个

rsync -av root@s0.foo.com:/srv/data/ /srv/data/ & 
lock $!

但是当 rsync 进度完成后,我应该 rm 锁定文件
我试过了

rsync -av root@s0.foo.com:/srv/data/ /srv/data/ && rmLock & 
lock $!

...那么我得到的pid好像不是rsync进程的pid :-(

最佳答案

如果你想防止同时执行,flock 是一个不错的工具:

$ flock -n /path/to/lock/file -c "rsync -av root@s0.foo.com:/srv/data/ /srv/data/" &

关于linux - 如何使用 bash 锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25863930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com