有一个脚本(在破折号上)在系统启动时运行(作为守护程序)。该脚本在根目录下运行。
在用户下,我创建了一个具有正确参数的文件,脚本每秒检查一次文件是否存在并读取参数。
也就是说,我通过文件将参数传递给脚本(以root身份运行)。你能给我一个更好的方法吗?
需要什么:通过用户命令(操作)以root权限执行脚本。在不提升用户权限的情况下。从文件夹(if-pre-up.d/...)运行脚本时,也许有一个选项可以提升网络接口。我正在查看 udev 并插入闪存卡,但这并不方便。
@Marcus Müller 例如,有一个文件应该在短时间内对用户可读(root:user 440)。之后权限应该变回(root:user 400)
@Marcus Müller OS 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
正确的?在安全方面,使用这种管道是否会恶化任何事情?
如果需要的只是特权提升,
sudo
可能比守护进程更好。如果你真的想要一个等待用户输入的后台进程,你可以使用
mkfifo
. 您的后台进程从这个命名管道中读取一行 (read line < the_named_pipe
),而用户只需在其中写入一些内容 (echo arg >> the_named_pipe
)。然后后台进程将进行被动等待,而不是每秒使用 CPU 的主动等待。