del_client.sh --delete client1 &
del_client.sh --delete client2 &
del_client.sh --delete client3 &
del_client.sh --delete client4 &
当我在后台执行上述命令时,client1
并没有被删除。
del_client.sh
上述操作过程中调用的代码:
del_client_entry()[
cat $FILE |grep -v ^"${entry}\." | grep -v ^"# ${entry} VT" > $FILE.del
cp -p $FILE.del $FILE
}
答案1
您的问题没有说明从哪里$FILE
获取其值,但听起来脚本的每次调用实际上都在操作相同的$FILE
.
如果这是真的,那么您的 4 次调用就会相互竞争,并且您看到的失败是预料之中的。因为您对此文件执行非原子读取+修改+替换操作,并且没有使用互斥来确保一次只有一个进程位于其关键部分,所以该文件的其中一个调用很容易破坏他人的修改。
你应该del_client_entry
在锁下运行。例如:
(
flock 9
del_client_entry <parameters>
) 9>/my/lock/file