通过vi将Solaris“crontab -e”locking

我昨天遇到了一个问题,lockingSolaris和crontab编辑,我想知道在Solaris上保护同一个crontab的多个并发编辑的最好方法是什么。 我已经确认,通过11.2.10.5.0在Solaris中存在该行为。

EDITOR=vi OS=Solaris 10, 11 SHELL=bash RBAC=pfexec 

现在,vi通常使用.filename.swp文件来防止同一文件的多个并发编辑,无论是来自多个用户还是来自同一用户的多个调用。 但是,“crontab -e”会创build一个临时文件,并将基于/ tmp / crontabXXXXXX的临时文件传递给$ EDITOR,并且多个“crontab -e”的并发调用会将不同的临时文件传递给$ EDITOR,从而允许更改当它从两个地方同时打开的时候,或者当一个暂停的vi会话由于TTY超时而被杀时,发生在crontab中。 在编辑的文件不同的情况下,$ EDITOR对第二次调用“crontab -e”没有任何警告。

我怎样才能防止这个问题发生? 伪随机临时文件名的使用可以防止vi中的内置locking工作,因此寻址似乎是最佳路线。 也许这个问题是更基础的,需要提出作为一个操作系统的错误。 Solaris crontab手册页并没有留下太多的希望,因为它指出“同一个crontab文件的同时修改可能会导致意外的结果。”,但我希望有人有一个答案。

如果这真的是一个问题,你将不得不自己写一些东西,正如手册页所示,它不是内置的。

你可以编写一个crontab(1)的包装器,在运行crontab(1)之前进行locking/locking检查。

在这个答案中,我build议使用mkdir的文件locking方法。

但是,这个想法似乎并不是一件微不足道的事情。