将参数传递给正在运行的脚本的最佳方法是什么?

将参数传递给正在运行的脚本的最佳方法是什么?

有一个脚本(在破折号上)在系统启动时运行(作为守护进程)。该脚本在 root 下运行。

我从用户下创建一个具有正确参数的文件,脚本每秒检查一次该文件是否存在并读取参数。

也就是说,我通过文件将参数传递给脚本(以 root 身份运行)。你能给我一个更好的方法吗?

需要什么:通过用户命令(操作)以 root 权限执行脚本。无需提升用户的权限。从文件夹(if-pre-up.d/...)运行脚本时,也许有一个选项可以提高网络接口。我正在查看 udev 并插入闪存卡,但这并不是很方便。

@Marcus Müller 例如,有一个文件应该在短时间内可供用户读取(根:用户440)。之后权利应该变回来(根:用户400)

@Marcus Müller 操作系统 Gnu/Linux (Debian)。 '这一切听起来就像你实际上是在用户和根守护进程之间传递消息。' - 是的

@Frédéric Loyer 我喜欢管道的解决方案。 @Marcus Müller 看到的错误管道行为确实发生了,但我需要每 5-30 分钟传递一个参数,所以不应该出现混淆(b 在 a 之前)。即我在 root 下运行的脚本将如下所示:

#!/usr/bin/dash
mkfifo fifo
while read line <fifo; do
        if [ $line -eq 'arg1' ] ; then
                echo 'Starting...'
        fi
done

正确的?就安全性而言,使用这种管道是否会恶化任何情况?

答案1

如果需要只是权限提升,sudo可能比守护进程更好。

如果您确实想要一个等待用户输入的后台进程,您可以使用mkfifo.您的后台进程从该命名管道 ( ) 中读取一行read line < the_named_pipe,而用户只需在其中写入一些内容 ( echo arg >> the_named_pipe)。然后后台进程将进行被动等待,而不是每秒使用 CPU 的主动等待。

相关内容