Solaris“crontab -e”通过 vi 锁定

Solaris“crontab -e”通过 vi 锁定

昨天我在 Solaris 上遇到了一个锁定问题,并遇到了 crontab 编辑问题,这让我想知道在 Solaris 上保护同一 crontab 的多个并发编辑的最佳方法是什么。我已确认在 Solaris 11.2.10.5.0 中存在此行为。

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

现在,vi 通常使用 .filename.swp 文件来防止对同一文件的多次并发编辑,无论是来自多个用户还是来自同一用户的多次调用。但是,“crontab -e”会创建一个基于 /tmp/crontabXXXXXX 名称的临时文件并将其传递给 $EDITOR,并且多次并发调用“crontab -e”会将不同的临时文件传递给 $EDITOR,当同时从两个地方打开 crontab 时,或者当暂停的 vi 会话由于 TTY 超时而被终止时(就像我遇到的情况一样),可能会允许撤销对 crontab 的更改。此外,第二次调用“crontab -e”时,$EDITOR 不会发出任何警告,因为正在编辑的文件不同。

我该如何防止这个问题发生?使用伪随机临时文件名会阻止 vi 中的内置锁定功能工作,因此解决这个问题似乎是最佳途径。也许这个问题更为根本,需要作为操作系统错误提出。Solaris crontab 手册页没有留下太多希望,因为它指出“同时修改同一个 crontab 文件可能会导致意外结果。”,但我希望有人能给出答案。

答案1

如果这确实是一个问题,您将必须自己写一些东西,因为手册页表明它不是内置的。

您可以为 crontab(1) 编写一个包装器,在运行 crontab(1) 本身之前执行锁定/锁检查。

在此回答我建议使用 mkdir 文件锁定方法。

但整个想法看上去并不是一件容易的事。

相关内容