我一直在构建这个(http://tryperl.com)学习Linux。所以,我的问题只是关于一些我不完全理解的 *nix 东西。
我想做的一件事是以受限用户身份运行生成的脚本(在我的应用程序中)。所以我创建了一个limiteduser
.然后我可以设置分叉限制像这样: limiteduser hard nproc 300
。
那么这是吗正确的方式将脚本运行为limiteduser
:
sudo -u limiteduser perl myscript.pl
第二,如果我有并发请求怎么办分叉并执行并使用不同的脚本同时运行上述代码。这会引起问题吗?我听说如果两个进程在同一用户上运行的话会怎样?
具体来说,我在 ubuntu 上运行,但我认为这适用于任何 *nix 发行版?
更新:另外,我计划使用暂停如果脚本花费太长时间,则使其超时,因此理想情况下,我应该运行有限数量的进程。
答案1
首先,sudo 是作为受限用户运行脚本的好方法。
其次,同时运行多个脚本实例是否会出现问题取决于脚本实际执行的操作。它(通常)与各个实例是否由同一用户运行无关 - 相反,您需要考虑脚本是否尝试编辑文件,在这种情况下,两个实例可能会尝试同时编辑同一个文件时间,这可能会使文件处于意外状态。
另外,当然,如果您限制允许用户运行的进程数,或者允许消耗多少内存,那么在某些时候您可能会遇到限制,并且脚本将无法执行您想要的操作。但这是整个限制系统的一个特点。 (如果你没有限制,那么一个写得不好的程序可能会导致你的整个系统陷入瘫痪。但同样,这是因为程序是如何编写的,而不是因为谁运行它(除非你运行以 root 身份运行程序则更容易破坏事物,这就是为什么让有限的用户运行事物是件好事)。)
答案2
关于你的第一点,这是一种方法!它是正确的。
关于第二点,Unix/Linux 可以像任何多进程操作系统一样处理许多并发进程。当它引起问题时,通常是由于资源争用。那么你的所有进程是否都会访问一个文件,或者一个慢速存储上的一个文件系统,或者一个带有大胖锁的 IPC 资源,等等。所以基本上你在 OS X 或 Windows 上遇到的并发问题在以下方面有相似之处: Linux/Unix 世界。