有一个脚本(在破折号上)在系统启动时运行(作为守护进程)。该脚本在 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 的主动等待。