使用Node.js调用flock?

12

我有一个cron工作来运行node.js脚本。

想要使用flock锁定文件以确保我的cron工作不会重叠。

有没有好的模块来进行文件锁定?

还是我应该在子进程中调用它?

或者我不应该做任何文件锁定?

抱歉,我是新手,不确定像node这样的异步环境是否适合文件锁定。谢谢。


我会使用子进程,因为flock非常简单易用...关于文件锁是否适用于异步操作,这取决于你的实现方式,就像大多数事情一样。只要小心不要阻塞I/O,你就应该没问题。 - srquinn
3个回答

8

如果您只是想防止cron作业重叠,请考虑在crontab中使用“flock”实用程序。

如果您的cron行看起来像这样:

*/10 * * * * /usr/bin/node /usr/local/share/myscript

你可以把它改成这样:
*/10 * * * * /usr/bin/flock -n /var/lock/myscript /usr/bin/node /usr/local/share/myscript

这将尝试获取锁定文件/var/lock/myscript上的锁。如果可以,它将在行的其余部分上运行命令,然后释放锁;如果不行(因为有另一个作业正在运行),则会失败。
这样可以避免您添加大量对'fs-ext'等的依赖。
更多信息请参见http://linux.die.net/man/1/flock

受 http://mihasya.com/blog/a-quick-note-on-cron-utilities/ 的启发(功劳归功于作者)。 - Evan P.
我遇到了这个错误:/bin/sh: -c: line 0: unexpected EOF while looking for matching '' /bin/sh: -c: line 1: syntax error: unexpected end of file`。 - chovy
您还可以避免使用fork()和不必要的子shell:https://blog.famzah.net/2013/07/31/using-flock-in-bash-without-invoking-a-subshell/ - famzah

4

1
这已经被弃用了,甚至无法在新版本的Node中安装。 - Jorje12

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接